1. ホーム
  2. スクリプト・コラム
  3. パール

Perlの特殊記号の紹介

2022-01-03 12:48:06

$_  

一般的に古いPerlの場所として知られているのは、プログラムがどのパラメータや変数を使うか教えてくれないときに、Perlが自動的に$_の値を使用することです。

for(1..10){
  print ;
}

ここでprintは引数を指定していないので、$_を使用しています。では、$_の中身は何でしょうか?ループするたびに$_の値は変わるので、実際には$_は1 . 10なので、上のコードは12345678910という結果を表示します。

$!

この変数は、関数呼び出しに失敗したときにのみ設定されるので、次のような使い方がよくされます。

open FILE,"<d:/code/zdd.txt" or die $!

$/

これはperlの行区切り文字で、デフォルトは改行文字です。この変数を変更すると、次のようにファイル全体を一度に読み込むことができます。

sub test{
  open FILE,"<d:/code/zdd.txt" or die $! ;
  my$olds= $/ ;
  local $/=undef ;
  my$slurp=<FILE> ;
  print$slurp,"\n" ;
  $/=$olds ;
}

$`

正規表現のマッチングで、マッチ位置より前のコンテンツを表す変数

$&

マッチを表す正規表現マッチ変数

$' 

正規表現マッチの変数で、マッチ位置の後に来るものを表す

xmlファイルを解析する例として、以下のxmlファイルで、Codeノードの値を取得したい場合を見てみましょう。

<?xml version='1.0' encoding='UTF-8'? >
<Code>200</Code>
以下のPerlコードでパースします。

my$str="<Code>200</Code>" ;
if($str=~/(? <=<Code>)(\d+)(? =<\/Code>)/){
  print"string before matched: $`","\n" ;
  print"matched string: $&","\n" ;
  print"string after matched: $'","\n" ;
}

実行結果は

マッチする前の文字列: <Code>
マッチした文字列: 200
マッチング後の文字列: </Code>

ここで、$`は <Code> に、$&は 200 に、$' は </Code> に対応する。

$|

現在選択されている出力ファイルハンドルのキャッシュを制御する、追加される例。

@_

サブルーチンに渡される引数のリストで、通常サブルーチンは渡された引数を取得します。

sub add {
  my ($num1, $num2) = @_;
  return $num1 + $num2;
}

サブルーチンの引数が1つだけの場合、shiftで取得することも可能で、その場合、shiftはshift @_と同じ意味になります。

sub square {
  my $num = shift ; # same as my $num = shift @_
  return $num * $num;
}


Perlの共通シンボル

=> キーと値のペア、左キー、右値

->参照、Javaの[オブジェクト.メソッド名]のドットに相当

:: は、クラスのメソッドの呼び出しを示します。

ハッシュのフラグで、キーと値のペアを定義します。

配列のフラグ

スカラーに関するフラグ

=~ マッチングのためのフラグ

! ~ 一致しないフラグ

は、$! コンテキストに応じて、エラー番号またはエラー文字列を返す