パッケージ

Perlでは、オブジェクト指向関連の機能が後付けで追加された。
その中の機能の一つがパッケージであり、C++名前空間や、Javaのパッケージに相当するものである。

package - パッケージの宣言 - Perl入門ゼミ

パッケージやブロックが変数の所属にどのように影響するかを試す。

パッケージ名を宣言していない場合は、mainパッケージに含まれる。
パッケージ名の宣言があればそのパッケージに含まれ、ブロックが解除されると宣言済みパッケージから抜ける。

$ vi package.pl
$ perl package.pl
100
*main::var
200
*PackageA::var
300
*PackageA::var
400
*PackageB::var
300
*PackageA::var
$

ブロックの中でも、PackageBが宣言されるまでは、PackageA::varにアクセスして値を入れ続け、ブロックを抜けても維持される。

Sample/perl/package/package/src/package at master · bg1bgst333/Sample · GitHub

splice

spliceは、配列に対して複雑な操作ができる。

splice関数 - 配列の要素の複雑な操作 - Perl入門ゼミ

簡単に言うと、指定した位置からの指定した個数の要素たちを、指定した別の複数要素たちに置き換えるというか・・・。

2番目からの2つ、300と400を、@newの3つに置き換える。

$ vi splice.pl
$ perl splice.pl
@old
300
400

@array
100
200
350
375
450
500
$

追い出された@oldは300と400だし、@arrayの2番目以降は500の手前まで@newの要素で置き換わっている。

Sample/perl/splice/splice/src/splice at master · bg1bgst333/Sample · GitHub

pop

popは、配列の末尾から要素を取り出す。

pop関数 - 配列/リスト - Perl関数のリファレンス

実行すると、

$ vi pop.pl
$ perl pop.pl
10
20
30
30
10
20
$

最初の3つがpop前の配列。
次が取り出した値30。
最後に残った10と20。
末尾から取り出せた。

Sample/perl/pop/pop/src/pop at master · bg1bgst333/Sample · GitHub

unshift

unshiftは、配列の先頭に要素を追加。

unshift関数 - 配列/リスト - Perl関数のリファレンス

実行すると、

$ vi unshift.pl
$ perl unshift.pl
$array[0] = 100
$array[1] = 200
$array[2] = 300
$var = 50
$array[0] = 50
$array[1] = 100
$array[2] = 200
$array[3] = 300
$

先頭に追加された。

Sample/perl/unshift/unshift/src/unshift at master · bg1bgst333/Sample · GitHub

tr///

文字を置換する場合は、"tr///"を使う。

tr - Perlリファレンス

"a"を"A"に、"C"を"c"に。

$ vi tr.pl 
$ perl tr.pl 
ABcDE
AABcc
AABcc
ABAcc
AAAcc
AAbcc
AAABc
AAbcc
$

それぞれの文字が置換された。

Sample/perl/tr/tr/src/tr at master · bg1bgst333/Sample · GitHub

s///

パターンにマッチした文字列を、別の文字列に置換する場合は、"s//"を使う。

Perl講座: 変数と文字列

として、"AbC"または"ABC"があれば、"XYZ"に置換する。

$ vi s.pl
$ perl s.pl 
XYZDE
aaBCC
AaBCC
ABACC
AAACC
aXYZC
aAaBC
AAbcC
$ 

正確に一致するところだけ"XYZ"になっている。

Sample/perl/s/s/src/s at master · bg1bgst333/Sample · GitHub