[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