Perl

多次元配列

配列のリファレンスをネストしていくと、多次元配列を作ることができる。リファレンスと多次元データ構造 - Perl入門ゼミ添字と添字の間のアロー演算子は省略できるので、より多次元配列っぽさがある。 $ vi array.pl $ perl array.pl 1 5 9 1 5 9 $指定した…

アロー演算子

C言語のポインタと同じく、配列などのリファレンスから要素の値を参照する場合はアロー演算子が使える。配列のリファレンス - Perl入門ゼミ添字の[]の前や、{}の前に->を置くことができる。 $ vi arrow_operator.pl $ perl arrow_operator.pl 3 3 value2 val…

push

pushで配列の末尾に要素を追加する。Perlの組み込み関数 push の翻訳 - perldoc.jppushで40を追加。 $ vi push.pl $ perl push.pl 10 20 30 10 20 30 40 $確かに40が末尾に追加された。Sample/perl/push/push/src/push at master · bg1bgst333/Sample · GitH…

ref

refでリファレンスの情報を返す。Perlの組み込み関数 ref の翻訳 - perldoc.jpリファレンスなら、"SCALAR"とか"ARRAY"とか何のリファレンスかを文字列で返し、リファレンスでない場合、偽として空文字列を返す。変数といろんなリファレンスをチェックしてみ…

無名サブルーチン

無名サブルーチンというものもある。サブルーチンのリファレンス - Perl入門ゼミ名前のないサブルーチンをその場で定義して、リファレンスとして変数に持っておける。$$でデリファレンスして10と20を渡すと、 $ vi sub.pl $ perl sub.pl 30 $足されて30が返…

無名ハッシュ

無名配列と同様に、無名ハッシュも作ることが出来る。無名ハッシュ生成子 - ハッシュのリファレンスを作成 - Perl入門ゼミハッシュの場合は、{}でキーと値を定義すると、それが無名ハッシュのリファレンスになる。%$でハッシュ全体、$$~{}で要素の値。 $ vi…

無名配列

リファレンスの応用として、無名配列を使うことが出来る。無名配列生成子 [] - 配列のリファレンスを簡単に作成 - Perl入門ゼミ要素を並べて[]で囲むと無名配列のリファレンスになるので、それをデリファレンスすれば要素の参照や操作ができる。@$で配列全体…

リファレンスのリファレンス

ポインタへのポインタと同様に、リファレンスのリファレンスというものも使える。perlref - Perlのリファレンスとネストしたデータ構造 - perldoc.jp\\というように2回付ける場合は、$$$というように3回付けてデリファレンスする。 $ vi reference.pl $ perl…

リファレンス

リファレンスは、C言語のポインタのようなものであり、変数、配列、ハッシュ、サブルーチン、などが格納されているアドレスを示す。perlref - Perlのリファレンスとネストしたデータ構造 - perldoc.jp Perl/リファレンス - Wikibooks変数などを代入する時、\…

ハッシュのコピー

ハッシュ全体を表す記号は%なので、%で始まるハッシュオブジェクトを代入するだけでハッシュをコピーできる。ハッシュをコピーする | まくまくPerlノートハッシュをコピーして、コピー元もコピー先も中身をいじる。 $ vi hash.pl $ perl hash.pl value1 valu…

ハッシュ

ハッシュ(連想配列ともいう)は、添字に文字列を指定することができ、文字列をキーとして値を取得できるデータ構造。Perlのハッシュを理解しよう - Perl入門ゼミPerlでもハッシュを使うことができる。1つ目は、'key1'から'key3'までをキーとして、'value1'か…

配列スライス

配列スライスという、複数の添字を指定できる方法を使って、配列の複数の要素から値を取り出したり、逆に複数の要素に値を代入することができる。配列スライス - 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] = …