in reply to Re: Retrieving information from an executable program
in thread Retrieving information from an executable program

Thanks for your quick reply. I will give it a try. Now suppose I want to set two parameters, say
my $name=; my $status;
Is there a way of assigning them inside a for loop, say using switch or if-else

Sam

Replies are listed 'Best First'.
Re^3: Retrieving information from an executable program
by Corion (Patriarch) on Jul 25, 2010 at 19:10 UTC

    No, there basically is no way to assign your variables that way. Well, you could store the names and references in a hash and then use that:

    my ($name, $status, $cid); my %vars = ( 'NAME' => \$name, 'CID' => \$cid, 'STATUS' => \$status, ); for my $line (@output) { my ($key, $val) = split /:/, $line, 2; if ($vars{ $key }) { ${ $vars{ $key } } = $val; } else { warn "Unknown key '$key', discarded"; }; };

    I'm not sure whether that's worth the trouble though.

      You are correct, it seems nothing is populated in @output variable
      CID:2301 NAME: Jane STATUS=OK $VAR1 = [];

      May you please advice how i can get @output filled by ./retrieve 2301
      Hello Corion
      May you please advice how i can assign this $vars{ $key } to my own variable, say my $newstatus=$status or something like that. I want to do some extra manipulation with the retrieved data?

      Sam

        May you please look at this code and advice why the output isn't one of levels defines;
        #!/usr/bin/perl use strict; use warnings; use Data::Dumper; my @output = `./retrieve 2301`; my ($name, $status, $cid); my $deref="LEVEL0"; my %vars = ( 'NAME' => \$name, 'CID' => \$cid, 'STATUS' => \$status, ); for my $line (@output) { $deref= "LEVEL1"; my ($key, $val) = split /:/, $line, 2; $deref="LEVEL2"; if ($vars{ $key }) { ${ $vars{ $key } } = $val; $deref= "LEVEL3"; } else { warn "Unknown key '$key', discarded"; $deref= "LEVEL5"; }; }; my $hashref = \%vars; print "\n$deref\n"; print "\n$hashref->{CID}\n"; print "\n$hashref->{NAME}\n"; print "\n$hashref->{STATUS}\n";

        And the output is
        CID: 2301 NAME:Jane STATUS:OK LEVEL0 SCALAR(0x8870e78) SCALAR(0x8870e60) SCALAR(0x8870e30)

        Note that only LEVEL0 output is displayed. I have also notice that, the output for CID, NAME and STATUS are from ./retrieve backquotes.