Perl6 その後。
ターミナル(端末)。ubuntu系は以下を同時押し。CTRL+ALT+T
manjaro/archlinux/antergos
yaourt -S rakudo でいかったかと。https://wiki.archlinux.jp/index.php/Perl#Perl_6
ubuntu
#Perl6 rakudo:: How to install(2017/01 最新版をいれてみる)その後2018年版もいれてみました。manjaro でも(pamacクリックでもインストールできます)。
#以下がないとコンパイルできません。
sudo apt install build-essential git libssl-dev
#ここからソースゲットとコンパイル
wget http://rakudo.org/downloads/star/rakudo-star-2017.01.tar.gz tar xfz rakudo-star-2017.01.tar.gz cd rakudo-star-2017.01 sudo perl Configure.pl --gen-moar --prefix /opt/rakudo-star-2017.01 sudo make install
たぶんこれでOK。上記サイトをよくご覧の上実行してください。PATHはマニュアルで設定しました。
PATH="/opt/rakudo-star-201701/share/perl6/site/bin:/opt/rakudo-star-201701/bin:$PATH"
当方は、日付部分をドットなしでインストールしています。
perl6 -v
This is Rakudo version 2017.01 built on MoarVM version 2017.01
implementing Perl 6.c.
#Perl6の場合
cd ; pwd #homeで。
(どこでもいいが4つぐらいファイルがあると便利)
echo >zshzsh.delete.txt #という名前のファイルを作成。
touch zshZSH.delete2.txt #という名前のファイルを作成。
touch fshFSH.delete.txt #という名前のファイルを作成。
touch fshFSH.delete2.txt #という名前のファイルを作成。
文例)lsでリストをとり、そのなかのzshという小文字名があるファイルのみの置換結果を表示する。その他のファイルはリストしない。だから、安易に -peは使えない。
ls | perl6 -ne 'print $_ if $_ ~~ s:i|zsh|BBB(ZSH)| ' #改行なし
ls | perl6 -ne 'say $_ if $_ ~~ s:i|zsh|BBB(ZSH)| ' #sayで改行付き。
ls | perl6 -ne 'say $_ if s:i|zsh|BBB(ZSH)| ' #sayで改行付き。さらに省略。
(置換条件を追加)
ls | perl6 -ne 'say $_ if ( s:i|zsh|BBB(ZSH)| and s|delete|削除するファイル| ) ' BBB(ZSH)ZSH.削除するファイル2.txt
BBB(ZSH)zsh.削除するファイル.txt
#Perl5の場合(どこでもいいが4つぐらいファイルがあると便利)
echo >zshzsh.delete.txt #という名前のファイルを作成。
touch zshZSH.delete2.txt #という名前のファイルを作成。
touch fshFSH.delete.txt #という名前のファイルを作成。
touch fshFSH.delete2.txt #という名前のファイルを作成。
文例)lsでリストをとり、そのなかのzshという小文字名があるファイルのみの置換結果を表示する。その他のファイルはリストしない。だから、安易に -peは使えない。
ls | perl6 -ne 'print $_ if $_ ~~ s:i|zsh|BBB(ZSH)| ' #改行なし
ls | perl6 -ne 'say $_ if $_ ~~ s:i|zsh|BBB(ZSH)| ' #sayで改行付き。
ls | perl6 -ne 'say $_ if s:i|zsh|BBB(ZSH)| ' #sayで改行付き。さらに省略。
(置換条件を追加)
ls | perl6 -ne 'say $_ if ( s:i|zsh|BBB(ZSH)| and s|delete|削除するファイル| ) ' BBB(ZSH)ZSH.削除するファイル2.txt
BBB(ZSH)zsh.削除するファイル.txt
ls | perl -ne 'print $_ if $_ =~ s|zsh|BBB(ZSH)|i'
#Perl5はさらに省略できる。Perl6はprintは裸ではだめ。
ls | perl -ne 'print if $_ =~ s|zsh|BBB(ZSH)|i '
#Perl5はさらに省略できる。通常ワンライナーではこの書き方の人が多いと思う。
ls | perl -ne 'print if s|zsh|BBB(ZSH)|i '
現実的にはperl5では自分はこう書きます。
ls *zsh* | perl -pe 's|zsh|BBB(ZSH)|i '
ls *zsh* | perl6 -pe 's:i|zsh|BBB(ZSH)| ' #(perl6では)
現実的にはperl5では自分はこう書きます。
ls *zsh* | perl -pe 's|zsh|BBB(ZSH)|i '
ls *zsh* | perl6 -pe 's:i|zsh|BBB(ZSH)| ' #(perl6では)
- Perl5でも最近のものは宣言すれば、sayが使える。
文字数が増えるのでワンライナー向きではない。aliasなどに指定しておく手はある。cpanで、-e を -Eにすればよいと知った。これなら短いですね。
- Perl5とPerl6では正規表現や文法が異なる。この例では、iの位置。前にもってくることで実行速度が速くなるらしい。と英語であった。このような短文字列なら大差はないが長文になった場合は、最後まで読まないとiだったのかぁとPerlが気がつくのが遅れると理解すればいい。つまり、最後に「あー、それからいい忘れていたけど、大文字小文字区別しないからね」といわれるより、「最初からいってくれよ。聞いてないよー」というネタみたいな話として解釈することにした。
- 演算子というのかな。~~、=~ みたいなの。Perl5とPerl6で意味が違う。こういう違いがあるので、単純にPerl5で書いたスクリプトに6という文字をつけても怒られるだけである。~~ は有能な気がしますね。
- Perl5はなくてならならない道具だけれども、見本で示したようなケースはよいのですが行数が増えてくるとPerl6には簡単には移行できそうにないです。というか、今のままでよいです。汗)
- 極めて個人的には、「あれ、この正規表現、通らないや!!」というとき、ワンライナーレベルならPerl6で実行するとすんなり思ったようになったりしますね。 その微妙さがわからない。
- ?after ?before みたいな指定方法はPerl5に比べてわかりやすいな!!とか、少ないメタ文字の中でPerl開発者の皆さんが苦労されているのが忍ばれます。追加で9から16個ぐらいメタ文字が増えると世界が変わるのでしょうけれど。$シリーズなんて大活躍しすぎです(覚えにくかった)。
試しているrakudo(古いことに気がついたので、冒頭の2017/01版を導入しました)
perl6 -v
This is perl6 version 2015.11 built on MoarVM version 2015.11
今、これ。manjaro上です。
$ perl6 -v
This is Rakudo version 2018.05 built on MoarVM version 2018.05
implementing Perl 6.c.