理科系の勉強日記

Linux/Ubuntu/Mac/Emacs/Computer vision/Robotics

Perl勉強メモ

第一歩

perl -e "print 'Hello world!';"

'-e'オプションは""内をperlスクリプトとして実行する.

以下のようなhello.plというファイルを用意して

# hello.pl
print "Hello World!! \n";

ターミナルで以下を実行.

perl hello.pl

基本

$xx = 1;
$yy = 3;
$zz = $xx + $yy;
print "The answer is $zz .\n";

変数名の前にシジル(sigil)と呼ばれる記号をつけて,スカラ($xx),配列(@xx),ハッシュ(%xx)を区別する.

{
my $num     = 2 + 3;
my $message = "Hello, world";
my @nums    = (0, 1, 2);
my %score   = (english => 100, math => 80);
# これらの変数は開き括弧「{」から閉じ括弧「}」までの間で有効.
}

配列

@xx = ( "A", "B" );
$xx[2] = 'C';
@xx[3..4] = ( "D", "E" );
print @xx;
print $xx[0];
print @xx[0..2];

ハッシュ

ハッシュは以下のようにすれば

%xx = ("tanaka","male","suzuki","female");
print "$xx{'tanaka'} \n";
print "$xx{'suzuki'} \n";

或いは

%xx = (tanaka=>male,suzuki=>female);
print "$xx{'tanaka'} \n";
print "$xx{'suzuki'} \n";

出力結果は

male
female

となる.

文字列比較演算子

if ($xx eq $yy)            # $xxと$yyが等しければ
if ($xx ne $yy)            # $xxと$yyが異なっていれば
if ($xx lt $yy)            # $xxが$yyより小さければ
if ($xx gt $yy)            # $xxが$yyより大きければ
if ($xx le $yy)            # $xxが$yyより等しいか小さければ
if ($xx ge $yy)            # $xxが$yyより等しいか大きければ
if ($xx =~ /ABC/)          # $xxがABCという文字を含んでいれば
if ($xx !~ /ABC/)          # $xxがABCという文字を含んでいなければ
if ($xx cmp $yy)           # 比較し、-1, 0, 1 のいずれかで返す

文字列結合

文字列$yyと文字列$zzを結合して文字列$xxに格納

$xx = $yy . $zz;
$xx .= $yy;

文字列置換

abcをABCに置換する.sは置換を表し,gは一括置換をあわらす.

$xx =~ s/abc/ABC/g;

正規表現によるマッチングで,対応する(...),(...)に$1,$2,..が格納される.

$xx = "12:34:56";
$xx =~ s/([0-9][0-9]):([0-9][0-9]):([0-9][0-9])/$1$2$3/g;