#!/usr/bin/perl use strict; use warnings; use Tie::Hash::Regex; use Net::Whois::IP qw(whoisip_query); my %k_ip = ( "101.78.231.135" => 320, "103.23.141.141" => 300, "103.23.244.22" => 288 ); my $ref_r; #this works foreach my $ip ( keys %k_ip ) { print "$ip \n"; print "\t" . try1($ip) . "\n"; print "\t" . try2($ip) . "\n"; print "\t" . try3($ip) . "\n"; } print "all done\n"; sub try1 { my $ip = shift(@_); my %r; tie %r, 'Tie::Hash::Regex'; my $ref_r = whoisip_query($ip); %r = %{$ref_r}; my $email = $r{qr/mail/}; if( length($email) > 0 ) { return $email; } else { return "no email"; } } sub try2 { my $ip = shift(@_); my $ref_r = whoisip_query($ip); tie %{$ref_r}, 'Tie::Hash::Regex'; if( scalar( keys %{$ref_r} ) < 1 ) { return "tie did not work..emtied underling hash"; } my $email = %{$ref_r}{qr/mail/}; if( length($email) > 0 ) { return $email; } else { return "no email"; } } sub try3 { return "This blows up -> Can't locate object method TIESCALAR \t\tvia package Tie::Hash::Regex \t\tat /home/wjw/tmp/tie_hash_regex.pl line 56"; my $ip = shift(@_); my $ref_r = whoisip_query($ip); tie $ref_r, 'Tie::Hash::Regex'; if( scalar( keys %{$ref_r} ) < 1 ) { return "tie did not work.."; } my $email = %{$ref_r}{qr/mail/}; if( length($email) > 0 ) { return $email; } else { return "no email"; } }