#amazon(4797336803)
#amazon(4873115671)
#contents
#br
#adsense(728x90)
#br





* 制御構文 (Control Statement) [#o819cad7]
** 条件分岐 (Conditional Statement) [#k8badf4d]
*** if [#ac8970f8]

#pre(soft){{
if ('''expr1'''){
        '''command1'''
} elsif ('''expr2'''){
        '''command2'''
} else {
        '''command3'''
}
}}


** 繰り返し (Loop Statement) [#tf34ec1b]
*** for [#jee1e245]

- 変数が条件を満たすまで処理を繰り返す
#pre(soft){{
for ( '''init; expr; in/decrement''' ) {
    '''command'''
}
}}


- 処理を10回繰り返す
#pre(soft){{
for ( i=0 ; i < 10 ; i++ ) {
    '''command'''
}
}}
-- 変数 i が 10 未満の場合に処理を行う

*** foreach [#sefee1ad]

- 変数に配列の値を順次代入する
#pre(soft){{
foreach $'''var''' (@'''array''') {
    '''command'''
}
}}
-- $'''var'''
--- 配列の値が代入される変数
--- 省略した場合、$_ に代入される
*** while [#r223b962]

#pre(soft){{
while ('''expr'''){
        '''command'''
}
}}



** 中断 [#vb1862b2]

** 終了 [#jc35e33e]


* 条件式 (Expression) [#sb1e3739]
** 文字、数値の条件式 [#d320d8d7]



** 論理結合 [#x8a469ed]

* 変数 (Variable) [#z0b95752]
- 変数の宣言
-- 「この変数を使いますよ」と明示すること
-- Perl の場合、変数名、データ型、スコープを明示する
-- グローバル スコープに限っては、宣言を省略することが出来る
-- ただし、use strict を指定する場合は必ず宣言する必要がある
** データ型 (Data Types) [#ma14a0bd]
*** スカラー変数 (Scalar Variable) [#x90ebf91]

- 単一の文字列や数字を代入することが出来る
- 変数名は $'''var''' 形式
- $ の次の一文字は必ずアルファベット
- 記号は _ (Under score) のみ使用出来る
- 大文字と小文字は区別される

----

- 変数の定義
#pre(soft){{
$'''var''' = '''value''';
$'''var''' = "'''value'''";
}}
-- 文字列の場合、" (Double quote) か ' (Single quote) で括る
- 変数の使用
#pre(soft){{
print $'''var''';
print ${'''var'''};
}}
-- { } (Braces) で括ることで変数名の範囲を指定することが出来る

----

- ex) 変数の使用
#pre(soft){{
host# cat sample.pl
#!/usr/bin/perl

$num = 10;
print "value is $num";

host# ./sample.pl
value is 10
}}
- ex) 変数の後に文字が続く場合は { } で括る
#pre(soft){{
host# cat sample.pl
#!/usr/bin/perl

our $num = 10;
print "value is ${num}cm";

host# ./sample.pl
value is 10cm
}}
- ex) ' (Single quote) で括ると変数が展開されない
#pre(soft){{
host# cat sample.pl
#!/usr/bin/perl

our $num = 10;
print 'value is $num';

host# ./sample.pl
value is $num
}}
*** 配列 (Array Variable) [#o2865ab6]

- 複数の文字列や数字を代入することが出来る
- 変数名は @'''var''' 形式
- @ の次の一文字は必ずアルファベット
- 記号は _ (Under score) のみ使用出来る
- 大文字と小文字は区別される

----

- 変数への代入 (単一)
#pre(soft){{
$'''var'''['''num'''] = '''value''';
}}
- 変数への代入 (複数)
#pre(soft){{
@'''var''' = ('''value1''', ['''value2'''...]);
@'''var''' = ("'''value1'''", ["'''value2'''"...]);
@'''var'''['''num1''', ['''num2'''...]] = ("'''value1'''", ["'''value2'''"...]);
}}
-- 文字列の場合、" (Double quote) か ' (Single quote) で括る
-- 単一の要素を示すため、@ ではなく $ になる点に注意
-- '''num'''
--- 代入する配列の位置 (0~)
- 配列の末尾に追加
#pre(soft){{
@'''var''' = (@'''var''' , '''value''');
}}
- 要素の個数をスカラー変数に代入する
#pre(soft){{
$'''var2''' = @'''var''';
}}


- 変数の使用
#pre(soft){{
print "@'''var'''";
print "$'''var'''['''num''']";
}}
-- 単一の要素を示すため、@ ではなく $ になる点に注意
- 最後の要素
#pre(soft){{
print "$'''var'''[$#'''var''']\n";
}}

----

- ex)
#pre(soft){{
host# cat sample.pl
#!/usr/bin/perl
use strict;

my @array;
my $num;

@array = ("AAA", "BBB", "CCC");
$num = @array;

print "@array\n"; &color(Red){すべて出力};
print "@array[1]\n"; &color(Red){特定の値を出力};
print "$num\n"; &color(Red){値の数を出力};

foreach (@array) { &color(Red){繰り返し処理ですべて出力};
        print "$_\n";
}

host# ./sample.pl
AAA BBB CCC
BBB
3
AAA
BBB
CCC
}}
*** ハッシュ変数 (Hash Variable) [#q3dadfc3]


- キーと値をペアとして代入した配列
- 配列と違い、要素の順序は意識しない
- 変数名は %'''var''' 形式
- % の次の一文字は必ずアルファベット
- 記号は _ (Under score) のみ使用出来る
- 大文字と小文字は区別される

----

- 変数への代入 (複数)
#pre(soft){{
%'''var''' = ('''key1''' => '''value1''', ['''key2''' => '''value2'''...]);
%'''var''' = ('''key1''' => "'''value1'''", ['''key2''' => "'''value2'''"...]);
}}
-- 要素が文字列の場合、" (Double quote) か ' (Single quote) で括る
-- キー名が英数字と _ (Under score) のみならクォートで括る必要はない
- 変数への代入 (単一)
#pre(soft){{
$'''var'''{'''key'''} = '''value''';
}}
- 配列の個数をスカラー変数に代入する
#pre(soft){{
$'''var2''' = %'''var1''';
}}

- 変数の使用
#pre(soft){{
print $'''var'''{'''key'''};
}}
*** 多次元配列 (Multidimensional Array Variable) [#i14fe806]

- 変数への代入 (複数)
#pre(soft){{
@'''array''' = (
        ['A1', 'B1'[, 'C1'...]],
        ['A2', 'B2'[, 'C2'...]],
        ['A3', 'B3'[, 'C3'...]],
        ...
);
}}

- 変数の使用
#pre(soft){{
print "$'''array'''['''1num''']['''2num''']\n";
}}

----

- ex)
#pre(soft){{
host# cat sample.pl
#!/usr/bin/perl
use strict;

my @array = "";

@array = (
        ['A1', 'B1', 'C1'],
        ['A2', 'B2', 'C2'],
        ['A3', 'B3', 'C3'],
);

print "$array[0][0] $array[0][1] $array[0][2]\n";
print "$array[1][0] $array[1][1] $array[1][2]\n";
print "$array[2][0] $array[2][1] $array[2][2]\n";

foreach my $i (@array) { &color(Red){繰り返し処理で出力};
        foreach my $j (@{$i}) {
                print "$j\n";
        }
}

host# ./sample.pl
A1 B1 C1
A2 B2 C2
A3 B3 C3
A1
B1
C1
A2
B2
C2
A3
B3
C3
}}
*** 多次元ハッシュ変数 (Multidimensional Hash Variable) [#c37224b8]

- 変数への代入 (複数)
#pre(soft){{
%'''hash''' = (
        Raw1 => { ColA => "A1", ColB => "B1", ColC => "C1" },
        Raw2 => { ColA => "A2", ColB => "B2", ColC => "C2" },
        Raw3 => { ColA => "A3", ColB => "B3", ColC => "C3" },
);
}}

- 変数の使用

----

- ex)
** スコープ [#f34dfba8]
*** グローバル変数 [#n4905eed]

- スクリプト全体で使用可能な変数
- use strict を指定しない場合、宣言をしていない変数はグロバール変数になる
- use strict を指定する場合、必ず our で宣言する必要がある

----

- 変数の宣言と定義 (同時)
#pre(soft){{
our $'''var''' = '''value''';
}}
- 変数の宣言と定義 (分割)
#pre(soft){{
our $'''var''';
$'''var''' = '''value''';
}}
*** ローカル変数 [#he6a0265]

- 特定の部分に限定して使用可能な変数
- 局所化することが出来るため、同じ変数名を別の役割で使うことが出来る

- my 変数
-- 宣言したスコープからのみ参照可能 (レキシカル スコープ)
-- スコープ内のサブルーチンからも参照出来ない
- local 変数
-- グローバル変数を、宣言したスコープ内で一時的に書き換える (ダイナミック スコープ)
-- 宣言したスコープが終了すると元の値に戻る
-- 宣言したスコープのサブルーチンからは参照可能

----

- my 変数の宣言と定義
#pre(soft){{
my $'''var''' = '''value''';
}}
- local 変数の宣言と定義
#pre(soft){{
local $'''var''' = '''value''';
}}
** 特殊変数 [#n617f5e5]


|変数|説明|h
|$_|デフォルト変数&br;foreach の変数など、その構文内でデフォルトで入っているであろう値が入る|
|@_|サブルーチンの引数|

* 関数 (Function) [#g47ae77b]

- 組み込み関数

----

#ls2(Program/Perl/Function)
* サブルーチン (Subroutine) [#oab9470b]

- ユーザが定義する関数を Perl ではサブルーチンという

** 定義 [#e0dd412b]

#pre(soft){{
sub '''subroutine''' {
        '''command''';
}
}}

** 呼び出し [#mf87206c]
- サブルーチンを呼び出す
#pre(soft){{
&'''subroutine''';
}}
- 引数を付けて呼び出す
#pre(soft){{
&'''subroutine'''('''arg''');
}}


** ライブラリ [#hc06aed3]

- 汎用的なサブルーチンをメイン スクリプトと独立したファイルに記述することが出来る
- サブルーチンが記述されたファイルをライブラリと呼ぶ

----

- ライブラリの読み込み
#pre(soft){{
require '''file''';
}}
* モジュール (Module) [#v6f94981]

- 外部モジュールの読み込み
#pre(soft){{
use '''module''';
}}

----

#ls2(Program/Perl/Module)
* コマンド [#u81bdd5a]
*** print [#ze12eb75]

- 標準出力に出力する
#pre(soft){{
print "'''text'''"
}}
-- Python では " (Double quote) と ' (Single quote) は同じ
-- 行末には改行が入る
- , (Comma) は改行しない
#pre(soft){{
print "'''text1'''", "'''text2'''"
↓
'''text1 text2'''

print "'''text1'''",
print "'''text2'''"
↓
'''text1 text2'''
}}
- 連結する
#pre(soft){{
print "'''text1'''" + "'''text2'''"
↓
'''text1text2'''
}}
- 繰り返し
#pre(soft){{
print "'''text'''" * '''num'''
}}
-- '''text''' を '''num''' 繰り返し出力



* 実行オプション [#n7610d6a]

** スクリプト ファイルの実行 [#q0092c52]

#pre(soft){{
# perl ['''option'''] ['''script.pl''']
}}

|オプション|意味|説明|h
|-e '''command'''||ワンライナー|
|-p||コマンドを繰り返し実行し、結果を標準出力に出力する|
|-n||コマンドを繰り返し実行する|
|-i '''filename'''||入力ファイルに上書き|
|-i'''exp filename'''||入力ファイルに '''exp''' を付与したファイルに出力|

** ワン ライナー [#i39f95a0]
*** ファイルをバックアップした上で置換 [#d4ec73aa]

#pre(soft){{
# perl -i.`date '+%Y%m%d'` -pe 's/foo/bar/g' *
}}
* その他 [#h057bbe1]
*** ファイルを開く [#r9fce194]
 open (STR,"list.txt")
 close STR;

*** 置換 [#dc9a9b69]
 $string =~ s/\n//;


#br
#adsense(728x90)
#br

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS