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


in reply to Re^3: array or array ref as variable
in thread array or array ref as variable

It works just fine :) Thank you Helen :)

what about a smarter way of doing this part?

$str =~ /^fw/ ? { @array = NT::FW->extract($content, %CFG) +} : $str =~ /^vrf/ ? { @array = NT::VRF->extract($content, %CFG) + } : $str =~ /^vlan/ ? { @array = NT::VLAN->extract($content, %CFG +) } : $str =~ /^portchannel/ ? { @array = NT::PORTCHANNEL->extract($conten +t, %CFG) } : return;
/Hossein

Replies are listed 'Best First'.
Re^5: array or array ref as variable
by HelenCr (Monk) on Jun 28, 2013 at 09:30 UTC
    In my opinion, something like this could work ( dropping the sub, in case you don't need that sub for something else):

    my (@fw, @vrf, @vlan, @portchannel); my @arr_methods = ([ \@fw, &NT::FW], [\@vrf, &NT::VRF], [\@vlan, &NT:: +VLAN], [ \@portchannel, &NT::PORTCHANNEL] ); foreach (@arr_methods) { @{$_->[0]} = ($_->[1])->extract($content, %CFG); }

    I haven't tested it, the right hand-side of the assignment may not work, (but it's close), if it doesn't work, maybe one of the higher gurus here can fix it.

    Run it and tell us the result

    Helen

      ok, I did this:
      my @arr_methods = ([ \@fw, \&NT::FW, 'FW'], [\@vrf, \&NT::VRF, 'VRF' +], [\@vlan, \&NT::VLAN, 'VLAN'], [ \@portchannel, \&NT::PORTCHANNEL, +'PORTCHANNEL'] ); foreach (@arr_methods) { @{$_->[0]} = ($_->[1])->extract( &slurpFile($CFG{$CFG{$_->[2]} +} ), %CFG); }

      If I run  [ \@fw, &NT::FW, 'FW'] I'll get this error message:

      Undefined subroutine &NT::FW called at main4.pl line 32.

      but when I do this: [ \@fw, \&NT::FW, 'FW'] that error message is gone.

      and when I run it I get this error message:

      Can't call method "extract" on unblessed reference at main4.pl line 48.

      /Hossein