PythonソースコードをPerlでさくっと修正してみる
新規にターミナル(端末)。CTRL+ALT+T
2to3 という、 「Python 2.x のソースコードを読み込み、一連の 変換プログラム を適用して Python 3.x のコードに変換するプログラム」がありますので、本来の目的用ではなく、Perlのワンライナー活用例です。
元のファイル、python000.py Python2用 3行のファイル。
# coding: utf-8
print "パイソン世界2から3への代表的な例::2to3が用意されている\n覚えておくといいかも。"
exit()
実行
$ python2 python000.py
パイソン世界2から3への代表的な例::2to3が用意されている覚えておくといいかも。
Python3で実行しようとすると怒られる。
$ python3 python000.py
^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print
なるほど、printの扱いが変わったのですね。これを修正します。修正の仕方も教えてくれる親切Pythonです。
$ perl -wlpe 's/\b(print)\b.*\"(.*)\"/$1 ("$2")/;s/\# coding: utf-8//' ./python000.py↲
2) # coding: utf-8 は当方では不要なので削除する。Windows環境では必要なのかも。UTF-8でしか書かないし、IOは全部UTF-8なので。
まとめて実行、1ライナーで修正して保存、そのまま実行
$ perl -wlpe 's/\b(print)\b.*\"(.*)\"/$1 ("$2")/;s/\# coding: utf-8//' ./python000.py | tee python003.py && echo "終 実行"; python3 python003.py ↲
print ("パイソン世界2から3への代表的な例::2to3が用意されている\n覚えておくといいかも。")
exit()
終 実行
パイソン世界2から3への代表的な例::2to3が用意されている
覚えておくといいかも。
$ python3 python003.py
としても当然同じなので、これでOK。
まとめ::結局bash上の使い方事例なのです
$ perl -wlpe 's/\b(print)\b.*\"(.*)\"/$1 ("$2")/;s/\# coding: utf-8//' ./python000.py |\
tee python003.py \
&& echo "終 実行";\
python3 python003.py ↲
パイプ、接続をばらして説明すると
1行目、PerlでPrintする内容をキャプチャしておいて、Python3仕様に変換。不要なUTF-8行削除
2行目、Tee で結果(Python3で動く内容)を出力しつつ新たなファイル(python003.py)に保存
3行目、作業が終わった目印を出力して(冗長)
4行目で、Python3で新規に生成されたスクリプトファイル(python003.py)を引数として実行
こういう流れですね。teeはなくても困らないけれど、ないとめんどくさいコマンドかなと思います。結局便利ですね。