发表于 2018-8-31 09:52:25

Perl Learning - 11 (hash keys, values, each, exists, delete)

Subroutine &keys() and &values() ruturns the keys and values of a hash.  #!/usr/bin/perl
  my %hash=("a"=>1,"b"=>2,"c"=>3,);
  my @k=keys %hash;
  my @v=values %hash;
  my $count=keys %hash;
  print "@k\n@v\n$count\n";
  if(%hash){
  print "That's not a empty hash\n";
  }
  $ ./key_value.pl
  c a b
  3 1 2
  3
  That's not a empty hash
  Although key list and value list are not ordered as we think, they order the same way.
  Between keys() and values() are called, don't change the hash.
  &each() returns the key_value pairs of a hash.
  while(($key,$value)=each %hash){
  print "$key => $value\n";
  }
  The only use of each() in practice is in while() loop.
  Note while() is a scalar context, when the condition is a list, take the number of elements of list for true/false judgment.
  If more than 0 element it is true, 0 element is false.
  We can use foreach to get an ordered key_value pair.
  foreach $key (sort keys %hash){
  print "$key => $hash{$key}\n";
  }
  &exists() can judge if a key exists in a hash or not.
  If exists then true, otherwise false.
  if(exists $hash{"a"}){
  print "There is a value for a\n";
  }else{
  print "There is no value for a\n";
  }
  &delete() deletes a pair of value and key from hash.
  It is not the same as to give undef to a value, with value undef the key_value still exists.
  The value of hash can be inserted in quotes like value of scalar.
  #!/usr/bin/perl
  my %books=(fred=>3,wilma=>1,barney=>0,pebbles=>undef,);
  foreach $person(sort keys %books){
  if($books{$person}){
  print "$person has $books{$person} items\n";
  }
  }
  %ENV stores the environment parameters of the system, we can get the envs:
  foreach $env(sort keys %ENV){
  print "The '$env' is '$ENV{$env}'\n";
  }
  Every value we exports in shell will be added to %ENV.
  $ export aa=AAAAAAAA    # set in shell
  print "The name of 'aa' is '$ENV{aa}'\n";
  The name of 'aa' is 'AAAAAAAAA'
  Execsices:
  1. Get names of some users, print their given names.
  #!/usr/bin/perl
  my %names=(
  fred => "flintstone",
  barney => "rubble",
  wilma => "flintstone",
  );
  foreach $surname(sort keys %names){
  print "The name of $surname is $names{$surname}\n";
  }
  ##################################
  2. Input some names, each line one name, Print the times of each name appears.
  #!/usr/bin/perl
  while(){
  chomp;
  $count{$_}++;
  }
  foreach $name(sort keys %count){
  if($count{$name}){
  print "$name appears $count{$name} times\n";
  }
  }
  ##################################
  3. Print %ENV each line left align, use length() to get the proper length to align.
  #!/usr/bin/perl
  my $longest=0;
  foreach(sort keys %ENV){
  $longest = length($_) if $longest < length($_);
  }
  foreach $env(sort keys %ENV){
  printf "%-${longest}s: %s\n", $env,$ENV{$env};
  }

页: [1]
查看完整版本: Perl Learning - 11 (hash keys, values, each, exists, delete)