Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

I have the following "working" script to convert hostname to IP (see below). However, instead of using the prefilled _DATA_. I would like to convert the script to convert hostnames from a file instead of _DATA ? (example: content of 1.txt) 111.123.123.123 111.123.123.124 any help would be great! I tried to modify it (see second script below) but doesn't work... ======= 1 - Working Script ======
#!/usr/bin/perl use warnings; use strict; use Socket; open (FILE, '>>111.txt'); while (<DATA>) { my $uri = $_; $uri =~ s/\s+//g; my ($name, $aliases, $addrtype, $length, @addrs) = gethostbyna +me $uri; my ($w,$x,$y,$z) = unpack('C4',$addrs[0]); print FILE "$w.$x.$y.$z\n"; } close (FILE); __DATA__ psclxgmprdonx03 totlxfiprdsp502
====== 2 - Second script .. doesn't work ============
my $dir = 'c:\temp'; my $file = $dir . '/' . 'RH5_CSV_Americas.csv'; open (my $fh, "<", $file) or die $!; ##my @file = <$fh>; open (FILES, '>>111.txt'); while (<$fh>) { my $uri = $_; $uri =~ s/\s+//g; my ($name, $aliases, $addrtype, $length, @addrs) = gethostbyname $uri; my ($w,$x,$y,$z) = unpack('C4',$addrs[0]); print FILES "$w.$x.$y.$z\n"; } close (FILES); }
===== end ======

Replies are listed 'Best First'.
Re: hostname to IP
by choroba (Cardinal) on Nov 06, 2014 at 08:55 UTC
    It works for me. What do you mean by "doesn't work"?

    Also note that the DATA section contained machine names, while your input file contains IP addresses, which is the expeted output.

    لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ
Re: hostname to IP
by Discipulus (Canon) on Nov 06, 2014 at 14:13 UTC
    i think you can write less code to do such work (i use winz double quotes: modify it as needed).

    I add a sligthly modified version of your second script, that works given a file with hostnames inside (not IPs...)
    perl -MSocket -lne "print inet_ntoa((gethostbyname$_)[4])" local_mach +ines_names_or_URI.txt # your's modified #!/usr/bin/perl use warnings; use strict; use Socket; my $file = 'ips.txt'; open (my $fh, "<", $file) or die $!; ##my @file = <$fh>; while (<$fh>) { my $uri = $_; $uri =~ s/\s+//g; my ($name, $aliases, $addrtype, $length, @addrs) = gethostbyname $ur +i; my ($w,$x,$y,$z) = unpack('C4',$addrs[0]); print "$w.$x.$y.$z\n"; }
    HtH
    L*
    There are no rules, there are no thumbs..
    Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.