in reply to Re: Parse variables from @output
in thread Parse variables from @output

You have:

.qq/ cisco Nexus 3048 Chassis ("48x1GE + 4x10G Supervisor)\n/

but your match wants cisco to appear at the start of a line:

$details{'Chassis'} = $1 if (/^cisco Nexus (\S+)/i);

You will need to allow for some whitespace in front of cisco, for example by allowing for \s*:

$details{'Chassis'} = $1 if (/^\s*cisco Nexus (\S+)/i);

But "start of the line" (^) means "start of the whole string" to Perl unless you also tell it to match after a newline using the /m modifier:

$details{'Chassis'} = $1 if (/^\s*cisco Nexus (\S+)/mi);

Adding that, I get:

$VAR1 = { 'Chassis' => '3048' }; $VAR1 = { 'Main Memory' => '483328K/40960K', 'Chassis' => 'CISCO2901/K9' }; $VAR1 = { 'Chassis' => 'WS-C3550-48', 'Main Memory' => '65526K/8192K' };

Replies are listed 'Best First'.
Re^3: Parse variables from @output
by Cisco_Dave (Acolyte) on Nov 15, 2019 at 09:22 UTC

    That's spot on thanks. Chassis variable working. Any idea on the memory part?

    $details{'Main Memory'} = $1 if (/^\s* Intel .* with (\S+) kB of memor +y/mi);

      Maybe now is a good moment to look at your regular expression and compare it with the input string.

      For example, there is a space after "Intel" in your regular expression, but no such space in your input string.

      Yeah that was the only issue. Learning curve this is. Top man cheers