[Israel.pm] how to read a file to a Hash?

Yuval Yaari yuval at windax.com
Sat Jul 10 21:39:28 PDT 2004


Good morning,

Your comments are good, I liked the "Oi Vei" part, because that's what I
said when I read it :)
Just one (style) thing:
while (my $line = <FILE>) {
}
This (AFAIK) also scopes $line inside the while loop.

And also:
send(Client,$line,0,) ??
Is that a spare comma after the 0?
Does it pass perl -c? strict? warnings? diagnostics? :)
Might be too early for me to read Perl (7:48am).

  Have a nice day,
  --Yuval


semuel said:
> Hello Liat.
>
> Just few notes on your code:
>> my $port = 2345||shift;
> should be: my $port = shift || 2345;
> (you first try to shift, and then if it fails you get your default
> value.
>
>> my $line = <FILE> ;
>>    while ($line)
>>    {
>>       send(Client,$line,0,)or die "send() failed: $!";
>>       $line= <FILE>;
>>    }
> should be:
> my $line;
> while ($line=<FILE>) {
>    send(Client,$line,0,)or die "send() failed: $!";
> }
> (well, it just look nicer, but does the same)
>
>>   nstore \%hash, 'file';
>>   my $hashref = retrieve('file');
>>   send(Client,$hashref,0,)or die "send() failed: $!";
> Oi Vei. Should be:
> my $serialized = freeze \%hash;
> send(Client,$serialized,0,)or die "send() failed: $!";
> and on the client side you should do:
> %moved_hash = %{ thaw($moved_serialized) };
> (both freeze and thaw are function of Storable)
>
> Semuel.
>
> -----Original Message-----
> From: perl-bounces at perl.org.il [mailto:perl-bounces at perl.org.il] On
> Behalf Of liat
> Sent: Saturday, July 10, 2004 10:22 PM
> To: Perl in Israel
> Subject: RE: [Israel.pm] how to read a file to a Hash?
>
> hellow,
> first of all thank you all for your help, i'm working on a project for
> my studies, alone without a guide
> and your help and directions are very useful and needed!!
> actually i'm looking for a perl expert for a privat lessons (by pay of
> course)  , so if anyone can and want to, plz let me know
>
> about the project, those are the modules of the server and client sides
>
> the server side===>>
>     use strict;
>     use Socket;
>     use Carp;
>     use Storable qw(nstore retrieve nstore_fd fd_retrieve);
>
>     my $port = 2345||shift  ;
>     ($port) = $port =~ /^(\d+)$/  or die "invalid port";
>
>     #creating the socket
>     my $proto = getprotobyname('tcp');
>     socket(Server, PF_INET, SOCK_STREAM, $proto) || die "socket: $!";
>
>     #the 'bind' func'
>     my $sin= sockaddr_in($port, INADDR_ANY) ;  #the 'sin' will insert
> bind(Server,$sin )|| die "bind: $!";       # into the bind func'
>
>
>     #the 'listen' func'
>     listen(Server,SOMAXCONN)  || die "listen: $!";
>
>     print "Server accepting clients!!!\n";
>     my $paddr;
>
>     #the 'accept' func'
> 	$paddr=accept(Client,Server) || die $!;
>
>
>    if (open(FILE,"url"))
>    {
>    my $line = <FILE> ;
>       while ($line)
>       {
>       send(Client,$line,0,)or die "send() failed: $!";
>          $line= <FILE> ;
>          }
>    }
>
>      my %hash = (
> 		"netvision" => {
> 			"adsl" => {
> 				"uname" => 'name',
> 				"upass" => 'pass',
> 			} ,
> 			"cable" => {
> 				"uname" => 'name',
> 				"upass" => 'pass',
> 			} ,
> 		},
> 		"zahav" => {
> 			"adsl" => {
> 				"uname" => 'name',
> 				"upass" => 'pass',
> 			} ,
> 			"cable" => {
> 				"uname" => 'name',
> 				"upass" => 'pass',
> 			} ,
> 			"dialup" => {
> 				"uname" => 'name',
> 				"upass" => 'pass',
> 			} ,
> 		},
> 	);
>
>    nstore \%hash, 'file';
>    my $hashref = retrieve('file');
>    send(Client,$hashref,0,)or die "send() failed: $!";
>
>
> the client side===>
>
> use strict;
>     use Socket;
>     my ($remote,$port, $iaddr, $paddr, $proto);
> 	my $line;
>     my @all_lines;
>     my %hashref;
>
>     $remote  = shift || '217.132.29.105';
>     $port    = 2345||shift ;  # random port
>     if ($port =~ /\D/) { $port = getservbyname($port, 'tcp') }
>     die "No port" unless $port;
>
>     $proto   = getprotobyname('tcp');
>     socket(SOCK, PF_INET, SOCK_STREAM, $proto)  || die "socket: $!";
>
>     $iaddr   = inet_aton($remote) || die "no host: $remote";
>     $paddr   = sockaddr_in($port, $iaddr); #the paddr will insert
>                                            # into the connect func'
> 	connect(SOCK, $paddr)    || die "connect: $!";
>
>
>
>     my $hashref;
>
>     recv(SOCK, $hashref,300,0)   or die "recv() failed: $!";
>
>    my $isp;
>    my %family;
>    my $roles;
>    my $person;
>    my $kind;
>    my $user;
>    my $pass;
>   while ( ($isp, $roles) = each %$hashref ) { ##need to write %$hashref
> in
> order to get the
>                                               ##hash of the reference
> the
> 'retrieve' returns
>     print "$isp: ";
>     while ( ($kind, $person) = each %$roles ) {
>         print "$kind=> ";
>          while ( ($user, $pass) = each %$person ) {
>         print "$user=$pass ";
>     }
>     print "\n";
> }
> }
>
>
>     close (SOCK)            || die "close: $!";
>     exit;
>
>
>
>
> it's not working of course becuase the sending of the "hashref" if not
> fits to the client side
> and as you see the client need to get the hash and printing it (kind of
> testing)
>
> regards
> liat koski
>
>
>
> -----Original Message-----
> From: perl-bounces at perl.org.il [mailto:perl-bounces at perl.org.il]On
> Behalf Of Gabor Szabo
> Sent: Saturday, July 10, 2004 7:20 PM
> To: Perl in Israel
> Subject: RE: [Israel.pm] how to read a file to a Hash?
>
>
> Liat,
> plese show relevant code examples so we can point to where to fix
> things.
>
> It is a lot easire to help and it is also good because the examples
> remain in the archive for the help of future generations....
>
> Gabor
>
> _______________________________________________
> Perl mailing list
> Perl at perl.org.il
> http://perl.org.il/mailman/listinfo/perl
>
>
> _______________________________________________
> Perl mailing list
> Perl at perl.org.il
> http://perl.org.il/mailman/listinfo/perl
>
>
>
> _______________________________________________
> Perl mailing list
> Perl at perl.org.il
> http://perl.org.il/mailman/listinfo/perl






More information about the Perl mailing list