Saved has asked for the wisdom of the Perl Monks concerning the following question:

When I drop this code on HP-UX it works, but in XP -strawberry perl it fails.

HP-UX

perl -MSocket -le 'print scalar gethostbyaddr(inet_aton("127.0.0.1"),A +F_INET)' localhost

Strawberry on XP

perl -MSocket -le 'print scalar gethostbyaddr(inet_aton("127.0.0.1"),A +F_INET)' C:\strawberry\Scripts>perl -MSocket -le 'print scalar gethostbyaddr(in +et_aton("127.0.0.1"),AF_INET)' Can't find string terminator "'" anywhere before EOF at -e line 1.

This is from "http://www.perlmonks.org/?node_id=87190"

Replies are listed 'Best First'.
Re: XP fails, HP-UX OK
by kcott (Archbishop) on Mar 07, 2012 at 14:52 UTC

    Here's an additional tip. You'll note how you needed to change four quote characters:

    HP-UX:
    perl ... -e '... "127.0.0.1" ...'
    XP:
    perl ... -e "... '127.0.0.1' ..."

    Also note in the HP-UX version, you've used double quotes around 127.0.0.1 although you don't actually want to interpolate that string. In this instance, it didn't matter but in other cases it will, cf. "$ip_addr" vs. '$ip_addr'. Escaped single quotes, i.e. \'127.0.0.1\', are an option but messy.

    Using q{}, qq{} and other Quote-Like Operators means you only need to worry about the two outer quotes:

    HP-UX:
    perl ... -e '... q{127.0.0.1} ...'
    XP:
    perl ... -e "... q{127.0.0.1} ..."

    You have a fairly straightforward one-liner here but you can have situations where you may need to change many more quotes. If you get into the habit of using q{}, qq{} and so on, you'll only need to remember to change the outer quotes and everything else will work as intended.

    -- Ken

Re: XP fails, HP-UX OK
by toolic (Bishop) on Mar 07, 2012 at 13:50 UTC
    It's a shell issue, not a Perl issue. You need different quotes. This works for me in a DOS shell:
    perl -MSocket -le "print scalar gethostbyaddr(inet_aton('127.0.0.1'),A +F_INET)"
Re: XP fails, HP-UX OK
by Anonymous Monk on Mar 07, 2012 at 13:47 UTC
Re: XP fails, HP-UX OK
by choroba (Cardinal) on Mar 07, 2012 at 13:47 UTC
    MS Windows' shell does not use single quotes the way *nix shells do. Swap single and double quotes for Strawberry.

      Swap single and double quotes for Strawberry.

      :) not for strawberry or any perl, but for the shell, for cmd.exe :)

      Thanx, works gr8