Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re^2: OS independent perl script

by Corion (Pope)
on Feb 21, 2014 at 11:46 UTC ( #1075727=note: print w/replies, xml ) Need Help??


in reply to Re: OS independent perl script
in thread OS independent perl script

For Windows, there is a really simple .cmd file that I use to launch a plain Perl script with the same name:

@echo off perl -w %~dpn0.pl

For a file test.cmd, this will launch perl -w test.pl in the same directory as test.cmd.

Replies are listed 'Best First'.
Re^3: OS independent perl script
by DrHyde (Prior) on Feb 21, 2014 at 17:08 UTC
    Is %~dpn0 some bizarro shell magic then?

      Yep.

      %0 corresponds to $0, and the magic letters behind the tilde are explained (for example) here.

        Nifty! And I wish I'd known all that back when I was using Windows!
      See also  help for and Re: Command line arguments not passed in Win7 ( regqueryperl.bat ), Question on Strawberry's Portable .bat file

      @setlocal @set thisdir=%~dp0 @set thisfile=%~f0 @set thisfilebasename=%~n0 @set thisfilename=%~nx0 @set thisfilecorion=%~dpn0.pl @set thisfilepl=%thisdir%%thisfilebasename%.pl @echo thisdir=%thisdir% @echo thisfile=%thisfile% @echo thisfilebasename=%thisfilebasename% @echo thisfilename=%thisfilename% @echo thisfilecorion=%thisfilecorion% @echo thisfilepl=%thisfilepl% @echo; @endlocal

      thisdir=D:\ thisfile=D:\this2.bat thisfilebasename=this2 thisfilename=this2.bat thisfilecorion=D:\this2.pl thisfilepl=D:\this2.pl

      And the advanced broken version (for stupid paths )
      ^ is trickier than the others ... above escaping useful for example if you're  echo %stuff% >> otherfile.bat
      yes, cmd.exe is a mess

      @setlocal @set "thisdir=%~dp0" @set "thisfile=%~f0" @set "thisfilebasename=%~n0" @set "thisfilename=%~nx0" @set "thisfilecorion=%~dpn0.pl" @set "thisfilepl=%thisdir%%thisfilebasename%.pl" @echo thisdir="%thisdir% @echo thisfile="%thisfile% @echo thisfilebasename="%thisfilebasename% @echo thisfilename="%thisfilename% @echo thisfilecorion="%thisfilecorion% @echo thisfilepl="%thisfilepl% @echo; @set "thisfile=%~f0" echo %thisfile% @set "thisfile=%thisfile:^=\^%" @set "thisfile=%thisfile:>=^>%" @set "thisfile=%thisfile:<=^<%" @set "thisfile=%thisfile:&=^&%" @set "thisfile=%thisfile:|=^|%" @set "thisfile=%thisfile:)=^)%" @set "thisfile=%thisfile:(=^(%" @set "thisfile=%thisfile:[=^[%" @set "thisfile=%thisfile:]=^]%" @set "thisfile=%thisfile:"=\"%" @echo escaped-thisfile "%thisfile%" @echo; @endlocal

      $ "D:\pa^th\this2.bat" thisdir=D:\path\ thisfile=D:\path\this2.bat thisfilebasename=this2 thisfilename=this2.bat thisfilecorion=D:\path\this2.pl thisfilepl=D:\path\this2.pl
        FWIW the second output was wrong one
        $ "pa^th\this2.bat" thisdir="D:\pa^th\ thisfile="D:\pa^th\this2.bat thisfilebasename="this2 thisfilename="this2.bat thisfilecorion="D:\pa^th\this2.pl thisfilepl="D:\pa^th\this2.pl $ echo D:\path\this2.bat D:\path\this2.bat escaped-thisfile "D:\pa\^th\this2.bat"

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1075727]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (3)
As of 2019-09-22 08:08 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    The room is dark, and your next move is ...












    Results (273 votes). Check out past polls.

    Notices?