And #perl++ too.
15:30 < hex> golf suggestions plz: $foo = 1 if ($bar ne 'foonly' || $baz ne 'foonly' || $honk ne 'foonly'); ... 15:36 < claes> hex: working on job security? 15:37 < hex> naw, just avoiding a pile of ||s. 15:37 < claes> ah 15:37 < hex> I went for my $foo = 0; foreach ($bar, $baz, $honk) { $foo = 1 if $_ ne 'foonly'; } 15:37 < claes> hex: use Perl6::Junction 15:37 < hex> claes: :D 15:38 < mauke> (grep $_ eq 'foonly', $bar, $baz, $honk) == 3 or $foo = 1; 15:38 < avar> my $foo; sub { $_ ne "foonly" && $foo = 1 for @_; 0 }->(@vars); 15:40 < kane[work]> we *so* need an 'in' statement 15:40 < mauke> "$foo $bar $baz" eq "foonly" x 3 or $foo = 1; 15:40 < kane[work]> $foo++ if 'foonly' in ($foo,$bar,$baz); 15:41 < avar> kane[work]: it's in the next release of perl 15:41 < kane[work]> of course it is 15:41 < kane[work]> everything is in perl6 :) 15:41 < clintp> And a pony. 15:41 < avar> if ("foonly" ~~ @vars) { $foo = 1 } 15:41 < avar> I mean 5.10 15:41 < kane[work]> ah 15:41 < kane[work]> perl5++ 15:41 < clintp> perl5++ 15:41 < kane[work]> perl5++ # exists 15:43 < mauke> "@{ +{foonly => 1} }{$foo, $bar, $baz}" eq "1 1 1" or $foo = 1;
TIMTOWTDI: It's a lifestyle choice.
Apparently ~~ is the smart match operator. (Thanks to mauke for bringing it to my attention, and to clintp for the link.) I'm looking forward to 5.10....
Postscript:
17:08 < broquaint> To add to hex's golf conversation because I'm too lazy to post to use.perl: my $foo = 'foonly' !~ /^(?:$bar|$baz|$honk)$/;
<hex> I went for
my $foo = 0; foreach ($bar, $baz, $honk) { $foo = 1 if $_ ne 'foonly'; }
Is that really what you mean? With it, the value of $foo
depends only on $honk
; the values of $bar
and $baz
don’t come into play at all, even though you test these variables.
Also,
<avar>
if ("foonly" ~~ @vars) { $foo = 1 }
I think that could be just $foo = "foonly" ~~ @vars;
.
But the solution I’d use is
$foo = 1 if grep $_ ne 'foonly', $bar, $baz, $honk;
I don’t consider that obfuscated either; “if grep
” is a well-known idiom.
Although these days, I’d have List::MoreUtils installed anyway, in which case it’s just:
$foo = any { $_ ne 'foonly' } $bar, $baz, $honk;
Re:More (better?) ways to do it
hex on 2007-03-14T21:49:25
Is that really what you mean? With it, the value of $foo depends only on $honk; the values of $bar and $baz don’t come into play at all, even though you test these variables.Are you sure?
That produces "1" for me, as I expected.#!/usr/bin/perl
my $foo = 0;
my $bar = 'foo';
my $baz = 'foonly';
my $honk = 'foonly';
foreach ($bar, $baz, $honk) {
$foo = 1 if $_ ne 'foonly';
}
print "$foo\n";The "if grep" isn't an idiom I'd previously heard. I'll bear it in mind in future.
Re:More (better?) ways to do it
Aristotle on 2007-03-14T23:36:22
Are you sure?
Err, d’oh. Somehow I read the code as if you were resetting the variable on each iteration, which is clearly not the case. My bad.