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

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.

Replies are listed 'Best First'.
Re^4: Retrieving information from an executable program
by kitifu (Initiate) on Jul 26, 2010 at 21:18 UTC
    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
Re^4: Retrieving information from an executable program
by kitifu (Initiate) on Jul 26, 2010 at 16:18 UTC
    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.

        I don't see how your output can be produced, but maybe that's because I don't see the input. It seems to me that the output of ./retrieve does not get captured in @output. What is the printout of

        #!perl -w use strict; use Data::Dumper; my @output = `./retrieve 2301`; print Dumper \@output;