Perlスクリプトによる実行ファイルを作るとき、Unix系OSでは拡張子が付けないことが多いのだが、Windowsでそれと同じことをやろうとしてもうまくいかない。Windowsではファイルの拡張子によってファイルタイプを判別するようになっているからだ。
Windowsで拡張子のないコマンド.exe
」「.com
」「.bat
」のどれかが補われる。Perlスクリプトの拡張子「.pl
」のままじゃダメってことだ。
じゃあ拡張子「.bat
」の中にPerlスクリプトを無理矢理埋め込めばいいんじゃないか?となるわけだ。
以下のファイルを「test.bat
」という名前で保存して実行してみると……
#!/usr/bin/perl use strict; use warnings; use Perl6::Say; say "Hello World!";
当然、そのままではうまくいかない。そこでファイルにおまじない
以下のファイルを「test.bat
」という名前で保存する。
@rem = '--*-Perl-*-- @echo off if "%OS%" == "Windows_NT" goto WinNT perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9 goto endofperl :WinNT perl -x -S %0 %* if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl if %errorlevel% == 9009 echo You do not have Perl in your PATH. if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul goto endofperl @rem '; #!/usr/bin/perl #line 15 use strict; use warnings; use Perl6::Say; say "Hello World!"; __END__ :endofperl @rem = vim:syn=perl
16行目~19行目がプログラムの本体だ。もう一度試してみよう。