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


in reply to Re: [SHELL] Detect backslash in command line args
in thread [SHELL] Detect backslash in command line args

The problem is that the history command isn't a bash executable, and so doesn't work in the context of a system() call by Perl.

Might Term::UI::History be of help here ?
Looks like accessing the shell's history is the only hope.

Thanks for the confirmations that this isn't trivial anywhere except MS Windows shells (which, I'm assuming, arises because on Windows the backslash is not necessarily an escape).
I have a perl script that I can use to transfer files from my Windows 7 box to my Ubuntu box. If I do perl get.pl C:/some/file all is fine. I was merely hoping to catch the error when I inadvertently do perl get.pl C:\some\file.
It's not really such a big deal because I eventually find out about the error anyway - and it's not actually an error that I'm liable to make with great frequency.

Cheers,
Rob

Replies are listed 'Best First'.
Re^3: [SHELL] Detect backslash in command line args
by mtmcc (Hermit) on Jul 09, 2013 at 07:07 UTC

    It doesn't arise on Windows, because the OS doesn't process the command line, just hands it straight to perl.

    I'm not certain that Term::UI::History wouldn't work, but because it couldn't be running when the command line is processed by the OS, I can't quite see how it would work.

    If your main concern is that you might ask perl to get a file that doesn't exist, I would use something like:

    die "$fileName not found.\n\n" if !-e $fileName;

    If it's writing to a new file, maybe you could similarly check that the directory exists, before writing to the file ?

    In any case, it's still a good question, and if you do figure out an answer, please let me know!

    Michael