On 8 Jun 2011, at 13:41, Paul Makepeace wrote: > On Wed, Jun 8, 2011 at 13:17, Tom Hukins <t...@eborcom.com> wrote: >> On Wed, Jun 08, 2011 at 02:00:41PM +0200, Abigail wrote: >>> I'd rather go for sacking people that don't know the difference >>> between >>> >>> if (something) { ... } >>> >>> and >>> >>> unless (!something) { ... } >> >> It's sunny outside and pubs are open: I can think of worse times to >> lose my job. >> >>> Or does everyone think they are always equivalent? >> >> I'm not everyone, and with a language as flexible as Perl I hesitate >> to make strong statements involving words like "always", but I don't >> recall encountering a situation where they differ. > > $ perl -le 'print "$_ == !!$_ ? ", $_ == !!$_ ? "yes" : "no" for (-1, > 0, 1, 2, undef)' > -1 == !!-1 ? no > 0 == !!0 ? yes > 1 == !!1 ? yes > 2 == !!2 ? no > == !! ? yes
Well, -1 may not equal !!-1, but truthwise it's the same, so it's the same to an if or unless statement. I realise this is getting a bit silly, but: foreach my $test_item (-1, 0, 1, 2, undef, '') { print "$test_item:\t" . return_truth_by_if_not($test_item) . ', ' . return_truth_by_unless($test_item) . ', ' . return_truth_by_if_not(!$test_item) . ', ' . return_truth_by_unless(!$test_item) . ', ' . return_truth_by_if_not(!!$test_item) . ', ' . return_truth_by_unless(!!$test_item) . "\n"; } sub return_truth_by_if_not { my $value = shift; if (!$value) { return 'non'; } else { return 'oui'; } } sub return_truth_by_unless { my $value = shift; unless ($value) { return 'non'; } else { return 'oui'; } } -- David Matthewman