コピー2019.11.24コマンドの達人を目指すために、避けては通れないプログラミング言語はたくさんあると思いますが、私はPerlで育ったエンジニアなので、Perlの学習は外せないと考えています。Hat系)ですぐに利用できます。実行perlコマンドでPerlスクリプトを実行できます。-eオプションはスクリプトをコマンドラインでそのまま記述することができるオプションです。World!takk@deb9:~/pl$パイプでperlへ標準入力させることができます。-nオプションを使うと、標準入力の各行をすべて繰り返し処理してくれます。$_は、標準入力の各行の文字列です。"[PERL]$_"'[PERL]1[PERL]2[PERL]3[PERL]4[PERL]5[PERL]6[PERL]7[PERL]8[PERL]9[PERL]10takk@deb9:~/pl$$_に格納されているのは、標準入力の各行なので文字列なんですが、そのまま数値計算することもできます。各行の数字に10を足して表示してみます。"[PERL]$_"'[PERL]11[PERL]12[PERL]13[PERL]14[PERL]15[PERL]16[PERL]17[PERL]18[PERL]19[PERL]20takk@deb9:~/pl$perlに読み込まれた直後の$_は改行を含んでいましたが、10を足した後の$_は、改行を含んでいませんので注意が必要です。printする時に改行を含んでみましょう。"[PERL]$_\n"'[PERL]11[PERL]12[PERL]13[PERL]14[PERL]15[PERL]16[PERL]17[PERL]18[PERL]19[PERL]20takk@deb9:~/pl$最初に改行を削除して、最後に改行をつける癖をつけても良いかもしれません。改行を削除するにはchompを使います。chompを実行すると、$_中の最後の改行が削除されます。変数Bashの変数は代入時は$をつけず参照時に$がつくのに対して、Perlの変数名は常に頭に$がつきます。'$a=10;print"$a\n"'10takk@deb9:~/pl$変数は数値でも文字列でも同じです。.(ドット)でできます。文字列;というように省略できます。HELLOtakk@deb9:~/pl$ただし$がつくのはスカラー変数です。値が一つしか格納できません。複数のスカラー値を格納するには、配列を使います。配列は@から始まる変数名で表します。5takk@deb9:~/pl$配列の各要素にアクセスするには、$変数名[インデックス]を指定します。インデックスは0はじまりです。配列操作Perl配列操作です。空の()を代入すればよいです。qw演算子を使ってスペース区切りにする方法があります。cctakk@deb9:~/pl$次は要素の取出しです。添え字でインデックスを指定して要素を取得することができますが、配列を操作して要素を取り出すことができます。popは配列の最後の要素を取り出します。4takk@deb9:~/pl$shiftは配列の先頭の要素を取り出します。5takk@deb9:~/pl$では要素の追加です。配列の最後に要素を追加するには、pushを使います。10takk@deb9:~/pl$配列の先頭に追加するにはunshiftを使います。5takk@deb9:~/pl$アセンブリ言語の経験があると、pushが追加でpop取出しと想像つきますが、shiftとunshiftがどちらがどちらか毎度迷います。私は、単語の文字数が多い方が追加と覚えてます。取出し要素の途中から一気に取り出すにはspliceを使います。spliceの第二引数が0はじまりのインデックスになります。Perlではハッシュと呼びます。ハッシュ変数は%が頭につきます。"\n";takk@deb9:~/pl$対応する要素が取得できます。猫takk@deb9:~/pl$=>は、,カンマと同じなので、カンマで書くこともできます。猫takk@deb9:~/pl$キーの文字列は、クォートを省略できます。猫takk@deb9:~/pl$値の文字列はクォートを省略できません。1.takk@deb9:~/pl$keysとvaluesで全キー、全値を取得できます。ファイル読み込みPerlでテキスト読み込みします。Perlを使う人はいきなり<>から入ると、理解するのに時間がかかると思うんです。ファイルオープンから始めます。ファイル名を指定してテキストを読み込むには、openを使ってファイルハンドラを取得します。“”でファイル名を指定しますが、読み込みの場合は”ファイル名”となります。$text;close(FH);takk@deb9:~/pl$ファイルをオープンして、一行だけ読み込んで表示するスクリプトです。読み込むファイルも作りましょう。in.txt101102103104105takk@deb9:~/pl$実行するとファイルの最初の一行が表示されます。変数へ代入する度に次の行が読み込まれます。全行を読み込むにはwhileを使えます。read-while.pl101102103104105takk@deb9:~/pl$$textという変数に読み込みしていますが、デフォルト変数($_)が使えます。$_を使うとスクリプトを簡潔に書くことができます。read.pl101102103104105takk@deb9:~/pl$配列を使えばファイルの全行を一括取得することができます。標準入力から読み込みします。ファイルを開いて読み込みするスクリプトと実行結果はこうでした。read.pl101102103104105takk@deb9:~/pl$対して標準入力を読み込んで表示するスクリプトと実行結果はこうなります。stdin.pl101102103104105takk@deb9:~/pl$標準入力を使う場合は、open/closeが不要になります。標準入力のファイルハンドラは、ですが、<>に省略して書けます。stdin.pl101102103104105takk@deb9:~/pl$さらにwhile(<>)のループを書かなくても実施してくれる-nオプションを使うとこう書けます。stdin.pl101102103104105takk@deb9:~/pl$さらに、printも-pで省略できます。stdin.pl101102103104105takk@deb9:~/pl$ここまでくるとスクリプトには何をかけばいいのか良くわからなくなるのですが、デフォルト変数$_を変更する処理を書きます。書き込み読み込みの後は書き込みです。書き込みするファイルを開くのにもopenを使います。書き込む文字列;使ってみます。"HELLO\n";close(FH);out.txtというファイルを作成してHELLOという文字列を書き込むスクリプトです。out.txtHELLOtakk@deb9:~/pl$次は、ファイル読み書きをしてファイルコピーするスクリプトです。@a;close(FH_IN);close(FH_OUT);コピー元ファイルを作ります。out.txttakk@deb9:~/pl$コピーされました。標準出力は、そのままprintするだけですね。してもハンドラを使いたいなら、STDOUTが使えます。stdout.plHELLOtakk@deb9:~/pl$標準エラー出力するには、STDERRを指定します。関連記事2-3.Perl/Python/RubyRuby入門Rubyを使うといっても、本ブログではそこまで本格的にということではなく、あくまでもコマンドラインでパイプをつなげて組み立てるrubyコマンドとして使います。インストールは、apt-ge...2-3.Perl/Python/Ruby繰り返しが外にあるワンライナー(Perl/Ruby/Python)複数行の標準入力を受けて、フィルタ処理するワンライナーです。PerlやRubyなら、-nオプションや-pオプションで、全行処理ができるので簡単です。改行は取り除いておく必要があります。驚く...2-3.Perl/Python/Ruby繰り返しのワンライナー(Perl/Ruby/Python)Perl/Ruby/Python各言語をかじったところで、ワンライナーを使えるようになっていきたいと思います。PerlやRubyでは-eオプション。Pythonでは-cオプションを使って直接スクリプトを書くことができます。こ...2-3.Perl/Python/RubyPython入門Perl,RubyときたのでPythonです。コマンドラインを使うときの言語にこだわりはなく、パイプが上手くつながればいいんじゃないかぐらいの感覚でPythonも使います。使うといっても他の言語と同じく入門的なことしか覚えてませんが。email.ホーム2.プログラミング言語2-3.Perl/Python/Rubyスポンサーリンク広告プロフィール管理人:takketeお仕事:システムエンジニア日々何か向上したくて、もがいています。Policyホーム検索トップサイドバースポンサーリンク広告プロフィール管理人:takketeお仕事:システムエンジニア日々何か向上したくて、もがいています。thanksタイトルとURLをコピーしました。