2017年2月11日土曜日

Perl6 のインストールとOneLiner ワンライナーメモ よくある自分

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の場合
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でも最近のものは宣言すれば、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.


0 件のコメント:

コメントを投稿