Loading ...
Sorry, an error occurred while loading the content.
 

Re: [PBML] Re:

Expand Messages
  • Paul.G
    Thanks again, going through your comments. The reason, I interchange the var legacy and device. Is because, I am attempting to separate legacy device names
    Message 1 of 20 , Sep 30, 2011
      Thanks again, going through your comments.

      The reason, I interchange the var legacy and device. Is because, I am attempting to separate legacy device names from agile names. Agile names become the key in a hash for legacy devices.

      for eg:
      /dev/disk/disk43   /dev/dsk/c4t5d6

      c4t5d6 is the legacy device name for disk43

      cheers



      ________________________________
      From: "andy_bach@..." <andy_bach@...>
      To: perl-beginner@yahoogroups.com
      Sent: Thursday, 29 September 2011 1:51 AM
      Subject: [PBML] Re: <STDIN>


       
      while (<CMD>) {
      my @device = (split/[\n]/);
      }

      Unfortunatley, the 'my' here means @device goes way outside the while loop
      my @device;
      while (<CMD>) {
      @device = (split/[\n]/);
      }

      same as:
      my @device = <CMD>;

      as the <...> splits on \n for you.

      >> Too many "my"s ... From this point on, the script does not make sense.

      (my $agile, my $legacy) = split(/\s+/, my $device);
      my $legacy{my $agile} = my $legacy;

      Yeah, you need to first declare the hash (as a hash, that is, w/ the '%')
      and then assign to it:
      my ($agile, $legacy) = split(/\s+/, $device);
      my %legacy;
      $legacy{$agile} = $legacy;

      'my' is only needed once per variable - it marks the variable as
      'lexically scoped' but it doesn't need to be part of any further use.
      Both:
      my @device;
      @device = <CMD>;

      and:
      my @device = <CMD>;

      are basically the same. After that you can just use @device (or
      $device[1] etc) as needed. "@devices" plural, is a better name (see
      below).

      It is silly/bad to use the same name for different vars unless there's
      really really a strong reason ... can't imagine one. So using legacy as a
      hash and a scalar var name will only confuse you more, later on. I often
      just pluralize whatever's in there (assuming 'legacy' refers to some old
      device name?)
      my %legacy_devices;
      $legacy_devices{$agile} = $legacy;

      "Perl Best Practices" suggests naming hash to reflect the fact that they
      are generally used as single objects ( $hash_name{$key} vs %hash_name -
      unlike arrays which are often used as collectives, e.g. @devices vs
      $devices[2]) so use a singular noun and a preposition (examples given:
      %title_of
      %count_for
      %is_available

      ) - a great book (Damian Conway, O'Reilly, natch) but we all can't be as
      consistenly clever as Mr. Conway, even in our dreams.

      Seems the next part you want is to get a name from the user and see if
      that is a key to your hash - you're close there, but:

      print "Which device file do you want\n "; # Test to find out why it
      chomp(my $name = <STDIN>); # hangs
      print "The value is $name \n";

      $hash_len = keys %legacy; # Number of lines in a hash
      print "The following elements\n";
      print "$agile --> $legacy{$agile} $hash_len\n";

      I think you want:
      print "$name --> $legacy_devices{$name} $hash_len\n";

      so:
      if ( exist $legacy_devices{$name} ) {
      print "$name --> $legacy_devices{$name}\n";
      }
      else {
      print "Sorry $name is not in our legacy devices list (length:
      $hash_len)\n";
      }

      or something.
      ----------------------
      Andy Bach
      Systems Mangler
      Internet: andy_bach@...
      Voice: (608) 261-5738, Cell: (608) 658-1890

      ?One of the most striking differences between a cat and a lie is that a
      cat has only nine lives.?
      Mark Twain, Vice President, American Anti-Imperialist League, and
      erstwhile writer

      [Non-text portions of this message have been removed]




      [Non-text portions of this message have been removed]
    Your message has been successfully submitted and would be delivered to recipients shortly.