in reply to Re^3: Using 'and'
in thread Array Woes

Note: I could have sworn I sent this in yesterday... bah.

My code edges into obfuscation? How about your double-negative return? ^^;;

++ on your modifications, but might I suggest:

#!/usr/bin/perl use strict; use warnings; use IO::Socket::INET; my @host = qw[ 192.168.0.5 66.100.167.57 ]; my $port = 22; foreach (@host) { check($_, $port); check_variation($_, $port); check_complication($_,$port); } sub can_connect { my ($ip, $port) = @_; return ! !IO::Socket::INET->new( PeerAddr => $ip, PeerPort => $port, Proto => 'tcp', timeout => 10, ); } sub check { my ($ip, $port) = @_; my $can_connect = can_connect($ip,$port); print "$ip is "; print "NOT " unless ($can_connect); print "listening on port $port\n"; return $can_connect; } sub check_variation { # changed this so Strict doesn't complain my $can_connect = can_connect(my ($ip,$port) = @_); print "$ip is "; print "NOT " unless ($can_connect); print "listening on port $port\n"; return $can_connect; } sub check_complication { print "$_[0] is ".($_?"":"NOT ")."listening on port $_[1]\n" and return $_ for can_connect(@_); }

When I was in high school I had a friend who believed he didn't have bad handwriting because, after all, he could read at least 85% of it. In that vein, "this isn't obfuscation!"


LAI
:eof

Replies are listed 'Best First'.
Re^5: Using 'and'
by tadman (Prior) on Dec 13, 2002 at 18:00 UTC
    The double-negative is, of course, to replicate the functionality of the earlier function which returned either 1 or undef. Invert once, and you get 1 on false, undef on true. Invert again, and you get 1 on true, undef on false.

    It's a cheap trick, and using !! can even throw off some syntax highlighters, so I tend to space it out.

    Here's another way to do it:
    my $foo = (....) && 1;