今日もPerl6を研究します。
前回はHomebrewおよびRakudo *(rakudo-star)をインストールし、perl6コマンドを実行して対話モードで
ホントによちよち歩きですのでその点あまり期待しないでください。
前回はHomebrewおよびRakudo *(rakudo-star)をインストールし、perl6コマンドを実行して対話モードで
"Hello World".say
を実行するところまででしたね。ホントによちよち歩きですのでその点あまり期待しないでください。
さて、今日は、上のプログラムをスクリプトから実行するところまでやってみようと思います。
まず、Perl 6の処理系であるperl6コマンドは、どこにあるのか、whichコマンドで確認します。
ということで、次のように書けばうまくいくと思ったんです。
ところが、これがダメなんです。
この「command not found」というのは、Perl 6ではなくて、MacのOS Xのbashが返していると思われます。
ディレクトリー、/usr/local/bin/の下を見てみると、perl(Perl 5のエンジン)はファイルの実体があるのに対して、perl6はファイルへのシンボリックリンクしかありません。
perl6のエンジンは/usr/local/Cellar/rakudo-star/2015.11/bin/perl6といういかにもアドホックな場所にあります。
この場合、以下のようにすると動くそうです。
どうだ。
動いたー。
これは、env(エンブ)コマンドというものをトリック的に使った例です。
env - Wikipedia
shebang行には、perl6エンジンの実体の代わりに/usr/bin/envとenvコマンドを書き、その引数にperl6と書きます。
この場合、perl6はwhichコマンドで返される値(上の場合は/usr/local/bin/perl6)が使われますので、違う環境に持って行って、/usr/bin/perlにあるperl6がデフォルトで使われていようと、/bin/perlにあるperl6がデフォルトで使われていようと、スクリプト変更なしで実行することができます。ただし、/usr/bin/envという場所にenvコマンドがある前提ありきです。
Perl 6の研究はこれで終わりで、以下全部余談です。
#!で始まるshebang行ですが、カタカナ表記はどうするべきでしょうか。
ぼくは一貫してシュバング、と書いています。外国人が発音しているのを聞き取るとそう聞こえたからです。ところが、日本語が堪能な米国人がメールで教えてくれたことには、ぼくらは「シュベイング」と発音している、とのことです。へー。
なお、最近は「シバン行」と書いている人が多いです。
カタカナをローマ字読みで読んだ時、shebangu(シェバング)、shubangu(シュバング)、shubeingu(シュベイング)、shiban(シバン)と書くと、shibanはいかにも通じなさそうです。もっとも、イントネーションとリズムの方が個々のスペルの発音よりもこの場合重要そうなので、「機動刑事ジバン」の「ジバン」と同じイントネーションで「 ̄__」と読めば通じると思います。「指板(_ ̄ ̄)」のように読むと確実に通じないと思います。
さっき、いつもの調子で「シュバング行」とGoogle検索すると、「シェバング行」が代替検索されてショックを受けました。Google的にはシェバングが正道?
比較すると
シュベイング行: 3件
シュバング行 : 266件
シュバン行 : 2,270件
シェバング行 :17,200件
シバン行 :20,800件
シェバン行 :21,200件
shebang行 :16,500件
という意外な結果が出ました。ううん、今後ぼくは本ブログでは英語でshebang行を取ります。本の中ではシュバング行になっていますのでご了承ください。ま、しょせんカタカナなんでどっちでもいいですよね。
まず、Perl 6の処理系であるperl6コマンドは、どこにあるのか、whichコマンドで確認します。
[kpc]$ which perl6
/usr/local/bin/perl6
[kpc]$
/usr/local/bin/perl6
[kpc]$
ということで、次のように書けばうまくいくと思ったんです。
#! /usr/local/bin/perl6
# perl6Hello.pl -- Perl 6でハロー(動かない)
"Hello World!".say;
# perl6Hello.pl -- Perl 6でハロー(動かない)
"Hello World!".say;
ところが、これがダメなんです。
[sample]$ ./perl6Hello.pl
./perl6Hello.pl:4: Hello World!.say: command not found
[sample]$
./perl6Hello.pl:4: Hello World!.say: command not found
[sample]$
この「command not found」というのは、Perl 6ではなくて、MacのOS Xのbashが返していると思われます。
ディレクトリー、/usr/local/bin/の下を見てみると、perl(Perl 5のエンジン)はファイルの実体があるのに対して、perl6はファイルへのシンボリックリンクしかありません。
[sample]$ cd /usr/local/bin
[bin]$ ls -al perl
-rwxr-xr-x 2 query1000 admin 2387028 Jan 29 2014 perl
[bin]$ ls -al perl6
lrwxr-xr-x 1 query1000 admin 39 Jan 19 07:22 perl6 -> ../Cellar/rakudo-star/2015.11/bin/perl6
[bin]$
[bin]$ ls -al perl
-rwxr-xr-x 2 query1000 admin 2387028 Jan 29 2014 perl
[bin]$ ls -al perl6
lrwxr-xr-x 1 query1000 admin 39 Jan 19 07:22 perl6 -> ../Cellar/rakudo-star/2015.11/bin/perl6
[bin]$
perl6のエンジンは/usr/local/Cellar/rakudo-star/2015.11/bin/perl6といういかにもアドホックな場所にあります。
この場合、以下のようにすると動くそうです。
#! /usr/bin/env perl6
# perl6Hello2.pl -- Perl 6でハロー
"Hello World!".say;
# perl6Hello2.pl -- Perl 6でハロー
"Hello World!".say;
どうだ。
[sample]$ ./perl6Hello2.pl
Hello World!
[sample]$
Hello World!
[sample]$
動いたー。
これは、env(エンブ)コマンドというものをトリック的に使った例です。
env - Wikipedia
shebang行には、perl6エンジンの実体の代わりに/usr/bin/envとenvコマンドを書き、その引数にperl6と書きます。
この場合、perl6はwhichコマンドで返される値(上の場合は/usr/local/bin/perl6)が使われますので、違う環境に持って行って、/usr/bin/perlにあるperl6がデフォルトで使われていようと、/bin/perlにあるperl6がデフォルトで使われていようと、スクリプト変更なしで実行することができます。ただし、/usr/bin/envという場所にenvコマンドがある前提ありきです。
Perl 6の研究はこれで終わりで、以下全部余談です。
#!で始まるshebang行ですが、カタカナ表記はどうするべきでしょうか。
ぼくは一貫してシュバング、と書いています。外国人が発音しているのを聞き取るとそう聞こえたからです。ところが、日本語が堪能な米国人がメールで教えてくれたことには、ぼくらは「シュベイング」と発音している、とのことです。へー。
なお、最近は「シバン行」と書いている人が多いです。
カタカナをローマ字読みで読んだ時、shebangu(シェバング)、shubangu(シュバング)、shubeingu(シュベイング)、shiban(シバン)と書くと、shibanはいかにも通じなさそうです。もっとも、イントネーションとリズムの方が個々のスペルの発音よりもこの場合重要そうなので、「機動刑事ジバン」の「ジバン」と同じイントネーションで「 ̄__」と読めば通じると思います。「指板(_ ̄ ̄)」のように読むと確実に通じないと思います。

さっき、いつもの調子で「シュバング行」とGoogle検索すると、「シェバング行」が代替検索されてショックを受けました。Google的にはシェバングが正道?
比較すると
シュベイング行: 3件
シュバング行 : 266件
シュバン行 : 2,270件
シェバング行 :17,200件
シバン行 :20,800件
シェバン行 :21,200件
shebang行 :16,500件
という意外な結果が出ました。ううん、今後ぼくは本ブログでは英語でshebang行を取ります。本の中ではシュバング行になっていますのでご了承ください。ま、しょせんカタカナなんでどっちでもいいですよね。