in reply to output difference between backtic and open().

G'day AltGrendel,

"Both work, however, when I use the first I have one server that apparently has hidden characters that would cause the the line to split prematurely. I expect the problem is in the split() in the foreach, ..."

I don't think it's the foreach loops. I think it's occurring with "my @trace = ...". Here's my untested guess at what's happening.

In the first case, you're splitting on a single space 's' character ("my @trace = split("\s", ..."). [Update: see explanation below by ++AnomalousMonk.]

In the second case, with "my @trace = <EXE>;", you're effectively splitting on a newline ("\n") which is the default value for the input record separator, $/ (see perlvar: Variables related to filehandles).

Try changing that first line to: my @trace = split("\n", ...

-- Ken

Replies are listed 'Best First'.
Re^2: output difference between backtic and open().
by AnomalousMonk (Archbishop) on Feb 26, 2014 at 02:18 UTC
    In the first case, you're splitting on a single space ("my @trace = split("\s", ...").

    Actually, it's split-ing on the letter 's' because the  \ (backslash) is an escape in a double-quoted string. The escape is unrecognized but passed through, a fact that Perl would have mentioned had warnings been enabled.

    c:\@Work\Perl\monks>perl -wMstrict -le "my $str = 'the rain in spain falls mainly'; ;; my @ra = split \"\s\", $str; printf qq{'$_' } for @ra; print ''; ;; @ra = split '\s', $str; printf qq{'$_' } for @ra; " Unrecognized escape \s passed through at -e line 1. 'the rain in ' 'pain fall' ' mainly' 'the' 'rain' 'in' 'spain' 'falls' 'mainly'

      ++ Well spotted. I've updated my post.

      -- Ken