Bob Heise on 7 Oct 2007 05:10:02 -0000 |
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Den Sunday 29 July 2007 22.53.33 skrev W. Chris Shank: > I am trying to do a simple Case statement in perl. I have a file with > key:value pairs. I can parse out each key and the value via a loop, but I > only need 3 keys, so I'm trying to make a Case statement where if the key > equals any of 3 criteria the corresponding value is saved to a variable. > Here is my script so far - but the value is never written to the variable. > What am i doing wrong? Thanks perl wizards for your help. > > #!/usr/bin/perl > > while(<>) { > chomp; > my ($key,$value) = split(/:/); > > use Switch; > switch ($key) { > case "displayName" { my $displayName = $value } > case "sn" { my $sn = $value } > case "givenName" { my $givenName = $value } > else { } > } > > } > print "displayName $displayName \n"; > print "sn $sn \n"; > print "giveName $givenName \n"; Hey Chris, Eric answered your question; however, like the others I think that switch is the wrong way to go. A hash lookup should always be faster than if else statements, or the ugly switch filter. Maybe something like this would work for you: #!/usr/bin/perl my $displayName; my $sn; my $givenName; my %options = ( 'displayName' => sub{ $displayName = $value }, 'sn' => sub{ $sn = $value }, 'givenName' => sub{ $givenName = $value } ); while(<>) { chomp; my ($key,$value) = split(/:/); $options{$key}->(); } print "displayName $displayName \n"; print "sn $sn \n"; print "giveName $givenName \n"; -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.5 (GNU/Linux) iD8DBQFHCGwChchU42miuVMRAkpQAJ4rZKLggRW8shP+gbTJkGniWSXWygCg6ez7 MMzLJoDpFPBU/ig2uKrUof4= =zh18 -----END PGP SIGNATURE----- ___________________________________________________________________________ Philadelphia Linux Users Group -- http://www.phillylinux.org Announcements - http://lists.phillylinux.org/mailman/listinfo/plug-announce General Discussion -- http://lists.phillylinux.org/mailman/listinfo/plug
|
|