in reply to HTML::Entities - Unmatched [ in regex

try
print encode_entities(scalar `cat two-lines-with-one-slash-each.txt`);

you're executing qx() in list context. the second argument to encode_entities is a character range, though.

Replies are listed 'Best First'.
Re^2: HTML::Entities - Unmatched [ in regex
by blazar (Canon) on May 30, 2007 at 20:55 UTC
    you're executing qx() in list context. the second argument to encode_entities is a character range, though.

    ++ because this just as obvious now as subtle enough to make me suspect that I wouldn't have spotted it easily in the first place. Indeed I don't like qx and try to avoid it if possible. Here, even if only working on a given OS, I don't see why one should rely on an external cat utility to do something that perl can handle perfectly fine itself: we would want a cheap idiom for slurping a file, and one can be provided by File::Slurp which is also known to be more efficient than the builtins. OTOH if not wanting to use an external module, I (would) do:

    print encode_entities do { open my $fh, '<', 'two-lines-with-one-slash-each.txt' or die "D'Oh! $!\n"; local $/; <$fh>; };

    If I wanted to stay even cheaper, I'd use @ARGV magic:

    print encode_entities do { local (@ARGV,$/)='two-lines-with-one-slash- +each.txt'; <> };
Re^2: HTML::Entities - Unmatched [ in regex
by andreas1234567 (Vicar) on May 31, 2007 at 05:30 UTC
    you're executing qx() in list context.
    Fooled by context issues. Again..

    ++tinita for pointing out. I totally agree with blazar that using cat to open files is a bad idea next to File::Slurp or a proper 3 argument open with error handling. I just could not figure out what was going on. Thanks.

    Andreas
    --