Perl

配列スライス

配列スライスという、複数の添字を指定できる方法を使って、配列の複数の要素から値を取り出したり、逆に複数の要素に値を代入することができる。配列スライス - Perl入門ゼミ@ary1の0番目と2から4番目までを@ary2に代入し、それぞれの値を出力。 その後に、…

split

splitは指定されたパターンで文字列を分割する。split関数 - 文字列 - Perl関数のリファレンス正規表現で複雑なパターンを指定できる。正規表現が少し難しいがこんな感じ。 カンマ、もしくは、連続する空白類で区切るのだが、カンマの前後に空白が入っていた…

localtime

localtimeでローカル時刻情報を取得できる。localtime関数 - 現在の日付・時刻を取得する - Perl入門ゼミ引数無しの場合、秒、分、時、日、月、年、曜日、をリスト形式で戻り値として返す。 年は1900年からなので、1900を足し、月は1月を0として始まるので、…

time

timeを使ってUNIX時間を取得できる。時間$unixtimeには、1970/1/1 00:00:00からの経過秒数が入る。 $ vi time.pl $ perl time.pl $unixtime = 1564957958 $こうなる。Sample/perl/time/time/src/time at master · bg1bgst333/Sample · GitHub

リストの添字

リストも添字を指定することで要素を取り出せる。リストの括弧のあとに、添字の大括弧を書いて、取り出す要素番号を指定することで取り出せる。 0番目から数えて1番目なので、$strには'DEF'が入る。 $ vi list.pl $ perl list.pl $str = DEF $確かにこうなる…

左辺値のリスト

左辺値にリストがある場合、右辺値のリストの要素の一部が切り捨てられたり、左辺値に未定義値が入ったり、様々である・・・。左辺値が配列要素のリストの時、いくつかのパターンでどうなるか見てみる。 どころどころ、配列の初期化がめんどいので、新しい配…

範囲演算子

リストやfor文などで、範囲演算子を使うと、インクリメントを簡単に表現できる。perlop - Perl の演算子と優先順位 - perldoc.jp The Perl5 Manual - 範囲演算子変数リストは1から3、配列は途中が3から5、for文も1から3を範囲演算子で表している。 $ vi rang…

配列のコピー

@で始まる配列オブジェクトに、@で始まる配列オブジェクトを代入するだけでコピーできる。配列をコピーする - Perl - とあるエンジニアの闇歴史帳参照渡しではなく、値渡しなので、まるごとコピー。 そうなっているかチェックするために、コピー後に$ary1[0]…

配列の最後の要素番号

配列名の頭に"$#"とすることで、配列の最後の要素番号を取得できる。配列の最後のインデックス - リストと配列 - Perl入門@aryの最後の要素番号を取得。 それに+1を足すと要素数なのでそれと、本来の配列の要素数(@aryの値)とも比較。 $ perl array.pl 4 5 5…

負の値の添字

Perlは、負の値の添字を使うことができる。[Perl] 配列の処理 その1 - 開発の覚書どこまで負の値が使えるか、どういう挙動になるか、試した。 $ perl array.pl ABC JKL GHI DEF ABC JKL $負の値-1で配列の最後の要素を指し、そこから前の要素に戻っていく。…

配列要素型の混在

Perlは、1つの配列の要素の型として、いろんな型を混在できる。Perl::データ構造整数、文字列、小数を混ぜている。 配列の要素で格納する場合と、リストで指定する場合両方を一応やっている。 $ perl array.pl 10 ABC 1.23 20 DEF 4.56 $確かに問題なく混在…

真偽値

Perlにおいて、if文などの条件式で、0、空文字列("")、空リスト、未定義値は偽となる。Perlにおける真偽値 - Perl入門ゼミこんな感じでチェックしてみる。 $ perl variable.pl false false false false false $ 全部false(偽)になった。Sample/perl/variable…

undef

既に値が格納されている変数に対して、未定義の状態に戻したい時は、undefを使う。undef関数 - 未定義値 - Perl入門ゼミいったん10を格納してからdefinedでチェックして、undefを入れてからまたdefinedでチェックしたらどうなるか・・・。 $ perl undef.pl t…

defined

変数の値が未定義値なのか、値が格納されているのかどうかは、definedでチェックする。defined関数 - 値が定義されているかを確認する - Perl入門ゼミ$var1は突然definedに渡されたので、未定義であり、falseとなる。 $var2は10を格納しているから、定義済み…

未定義値

変数がいきなり出てきたとき、値は未定義である。 値が未定義の時、出力や計算ではどのように解釈されるか。PerlでのNULL$var1は出力なので空文字列、$var2は計算なので0と解釈される。 $ perl variable.pl [] 20 $こうなる。Sample/perl/variable/undefined…

暗黙の文字列変換

Perlでは、ダブルクォートやシングルクォートで囲まれていなくても、数値やサブルーチン名でない限りは暗黙的に文字列に変換する。文字列abcdeのままでも、文字列として$strに格納される。 $ perl implicit_string_conversion.pl abcde $文字列として出力さ…

ヒアドキュメント

複数行の文字列をコード上で扱う場合は、ヒアドキュメントを定義する。ヒアドキュメント - 複数行の文字列を簡単に作成 - Perl入門ゼミ"$text = <

qr

正規表現を変数で持っておく場合、qrを使うことができる。qr演算子 - 正規表現のリファレンスを作成する - Perl入門ゼミこうできる。 $ perl regular_expression.pl abc not match /A[bB]C/ $ perl regular_expression.pl AbC match /A[bB]C/ $ perl regular…

qw

リストは、qwを使ってスペース区切りで表現できる。文字列リスト演算子 - qw() - Perl入門ゼミスペース区切りで定義したリストで変数や配列の初期化。 $ vi list.pl $ perl list.pl $x = 10, $y = 20, $z = 30 $array[0] = 100 $array[1] = 200 $array[2] = …

qx

バッククォートはqxと同義。バッククォート演算子 - 別プロセスを実行し標準出力を取得 - Perl入門ゼミ今回もlsを実行。 今度は改行を付けずに出力。 $ vi back_quote.pl $ ls back_quote.pl $ perl back_quote.pl back_quote.pl $まったく同じ。Sample/perl…

q

シングルクォートで囲まれた文字列は、q/~/と書くこともできる。q - クォート演算子 - Perl入門ゼミqqとqを比較すると、 $ vi single_quote.pl $ perl single_quote.pl XXX ABC YYY AAA $str BBB\n$qqは変数展開とエスケープ処理が効くが、qはそれらが効か…

qq

ダブルクォートで文字列を囲むことと同じことが、qq/~/でも可能である。qq - ダブルクォート演算子 - Perl入門ゼミこれで、 $ vi double_quote.pl $ perl double_quote.pl XXX ABC YYY $$strが展開されている。Sample/perl/double_quote/qq/src/double_quot…

文字列変数の展開

ダブルクォートで囲まれた文字列中の変数が、スペースなどで区切られていれば変数として認識できるが、そうでない場合は認識できない場合がある。"${str}"のように'{'と'}'で区切ることで変数であると認識可能にできる。変数展開時の変数名と文字列の区切り …

バッククォート

ダブルクォートは、変数の展開やエスケープ処理ができる、シングルクォートは、変数の展開やエスケープ処理ができない、であった。 バッククォートの特徴としては、コマンドをシェルで実行するという部分がある。バッククォート演算子 - 別プロセスを実行し…

数値リテラル

整数、小数、16進数、べき乗など、Perlの数値リテラルに関しても、さまざまな数値の表し方がある。数値リテラル - ソースコード上での数値の表現 - Perl入門ゼミ金額とか、欧米だと3桁区切りであったり、こういう指定ができる。 $ vi numeric_literal.pl $ p…

subの戻り値

サブルーチンの戻り値は、returnのあとに戻り値を指定すればいい。perlsub - Perl のサブルーチン - perldoc.jp2つの引数の値を足して、足した結果を戻り値とするサブルーチンaddを定義。 サブルーチンの結果は$rに格納。 $ vi sub.pl $ perl sub.pl add(10,…

subの引数

サブルーチンの引数は、"@_"に配列という形で格納されるので、shiftなどで取り出して使う。perlsub - Perl のサブルーチン - perldoc.jp渡した文字列を出力するprintStrを定義。 shiftで@_から$argに引数が渡る。 $ vi sub.pl $ perl sub.pl ABCDE $このよう…

sub

Perlでは、ユーザー定義できる複数の処理をひとつにまとめたものは関数ではなくてサブルーチンという。サブルーチンの作成方法 - Perl入門ゼミ古くはVisualBasicもサブルーチン持ってるし、戻り値が無い場合をサブルーチンというほうが個人的にはしっくりく…

shift

shiftに配列を渡すと、配列の先頭の要素を取り出して、配列の要素をひとつずつ前にずらす。shift関数 - 配列/リスト - Perl関数のリファレンスまず、リストで配列を初期化し、配列の要素をfor文で出力。 shiftで取り出した要素を$strに格納し出力。 ふたたび…

ダイヤモンド演算子

行入力演算子は、<IN>というようにファイルハンドルから1行ずつ読み出す形であった。 ファイルハンドルを指定しない<>はダイヤモンド演算子と呼ばれ、標準入力またはコマンドライン引数で指定されたファイルから1行ずつ読み出す。行入力演算子「<>」 - ファイル</in>…