- 基本
3**3 # => 9
3x3 # => "333"
"a"x3 # => "aaa"
1."a" # => "1a"
# 文字列や数値は随時キャストされる
10 x 3 * 5 # => 505050
"1a" * 3 # => 3
"" * 3 # => 0
"a" * 3 # => 0
3 * '4' # => 12
"1.1" + "3.3" # => 4.4
int "1.3" # => 1
int "-2.3" # => -2
# Scalar Variables
$a = 1
# Array Variables
@a = (1, 2, 3)
$a[1] # => 2
$b = @a # => 3 (要素数)
# Hash Variables
%a = (a, 1, b, 2)
$a{a} # => 1
keys(%a) # => (b, a)
values(%a) # => (2, 1)
$b = %a # => 2 (要素数)
- 変数
# $$変数
$v = "abc";
$$v = 100; # => $abc = 100 と同じ
$v = -10
$$v = 200; # => ${-10} = 200 と同じ
$v = 10
$$v = 300; # => $10 = 300 と同じ
# --> エラー (正規表現のsubpattern用変数でread-only)
- 入出力
# 入力
$x = <STDIN>
$y = <>
# 出力
print "Hello" # => 出力: "Hello"
print # => "$_"."$\" が出力される
say "Hello" # => 出力: "Hello\n" ("use feature" が必要?)
- 文字列処理
# glob関数
# 引数は空白区切りで、文字範囲やワイルドカードを含むファイル名
# 引数のワイルドカードが指定されてない場合、文字列がリストとして返される
# => 特定の入力に対し、文字列をsplitして返してくれるものとみなせる
glob "10 20 30" # => ("10", "20", "30")
- 配列処理
# map関数
map { $_ * 2 } (1, 2, 3) # => (2, 4, 6)
map(($_, $_*2), (1, 2, 3) # => (1, 2, 2, 4, 3, 6)
# join, split
join(',', (1, 2, 3)) # => "1,2,3"
split(',', "1,2,3") # => ("1", "2", "3")
- 正規表現マッチ
# マッチする文字列が含まれるか
"abcdef" =~ /de/ # => 1
"abcdef" =~ /bd/ # => ''
# マッチする文字列が含まれていないか
"abcdef" !~ /de/ # => ''
"abcdef" !~ /bd/ # => 1
# gオプションでマッチするもの全てをリストとして返す
"adbbcded" =~ /.d/g # => ('ad', 'cd', 'ed')
# 置換処理
$a = "abcdef"
$a =~ s/[bcd]/e/g # => 3
$a # => "aeeedf"
$b = "abcdef"
$b =~ y/bcd/123/g # => 3 (tr/bcd/123/g も同じ)
$b # => "a123ef"
# デフォルト引数
$_ = "abcdef"
/bcd/ # => 1
$_ = 12345
s/[24]/6/g # => 2
$_ # => 16365
- 特殊変数
# デフォルト引数: $_
$_ = 'abc'
chop
$_ # => 'ab'
say # => 出力: "ab\n"
# 現在の入力行番号: $.
# ** 入力を行った回数とみなせる?
$/=' ';1 while <>; print $. # 入力: '1 4 9' => 出力: 3
# input record separater: $/
# ** デフォルト値: "\n"
$/ = ' '; # (' 'を入力の区切りとして認識)
print <>-<>; # 入力: "1 2" => 出力: -1
# output record separater: $\
$\ = 'x'; # ('x'を出力の区切りとして認識)
print "test"; # => 出力: "testx"
print 123; # => 出力: "123x"
# output list separater: $"
# ** デフォルト値: " "
@x = (1, 2, 3);
print "@x"; # => 出力: "1 2 3" ($" = ' ')
$" = "x";
print "@x"; # => 出力: "1x2x3"
# output field separater: $,
$, = "x";
print (1, 2, 3); # => 出力: "1x2x3"
# マッチングした文字列: $&, 最後の括弧でマッチングした文字列: $+
"ab129cd" =~ /([0-9]+).*d/
print $&; # => 出力: "129cd"
print $+; # => 出力: "129"
# マッチング前後の文字列: $`, $'
"1 2 3" =~ " ";
print "$`+$'"; # => 出力: "1+2 3"
# 1ページの残りの行数: $-
# ** 負の値は0になる
$- = -10 # => 0 (負の値は0に)
# 1ページあたりの行数: $=
# ** 常にintにキャストされる
$= = 'abc' # => 0
$= = 1.5 # => 1
# 総出力ページ数: $%
# ** $%のあとにifやwhileが繋げられる変数として利用可能
$%=<>; print$_*$%for 1..5
参考: http://www.perlmonks.org/?node_id=353259