http://www.perlmonks.org?node_id=1016678


in reply to Re^2: How to store matched $1 values one by one to array?
in thread How to store matched $1 values one by one to array?

Well, it's not an inconvenience, but that does now highlight where you're going wrong.

Declare your array outside of whatever loop iterates over your logfile and replace my @array=$agent_id; with a push statement, as I indicated.

-- Ken

Replies are listed 'Best First'.
Re^4: How to store matched $1 values one by one to array?
by rekhasri (Initiate) on Feb 02, 2013 at 09:15 UTC
    if($line =~ /^.*:agent_id=>(.+?),/){ # Calls count based on call type my $agent_value=$1; my $agent_value=~s/\"//g; push @agent_ids, $agent_value; print Dumper\@agent_ids; }

    Before while loop I have declared the @agent_ids and then added the push function with array and scalar variable.

    While printing the @agent_ids variable it printed the undef in array.

    I don't know why it is printing the undef values instead of exact values.

      $agent_value is declared two times.
      The substitution should not be used with my.
      Just remove the second lexical declaration and the code works.

      Also, I recommend to use strict and warnings.

      'warnings' says: "my" variable $agent_value masks earlier declaration in same scope at ...
      Remove the second my before $agent_value. It resets its value. Also, turn on warnings to be warned against the practice of redeclaring a variable.
      لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ