TWクラブ【BloodyRosary】@15.その他
qq()
ダブルクォートで囲ったのと同じ意味
例
print qq(出力);
<出力結果>
出力
ほかにもシングルクォートの q() とかある
qx() はシステムコマンドを実行するのと同じ
例
print qx(date);
<出力結果>
2009年 4月 10日 金曜日 17:03:20 JST 例の場合、現在日付取得のコマンドが実行された
結果の格納も可能
例
@list = qx/date/; @listに結果が格納される (qxで囲むやつは(でも/でも{でもいい
print @list;
<出力結果>
2009年 4月 10日 金曜日 17:03:20 JST
exec()
現在実行中のPerlスクリプトを終了して、代わりに引数で指定したプログラムを実行する
実行できずにエラーになった場合を除き、制御は戻らない。
例
exec(date);
print qq(出力);
<出力結果>
2009年 4月 10日 金曜日 17:14:53 JST 制御が戻らないため、print qq(出力); は実行しない
system()
システム上のプログラムを実行します。実行後はexecとは違い、制御に戻ります。
例
system(date);
print qq(出力);
<出力結果>
2009年 4月 10日 金曜日 17:15:57 JST
出力 制御が戻るため、print qq(出力); も実行する
systemとqxの違いについてはここで語っている模様
http://okwave.jp/qa372457.html
print `date` も同じ動きをする。
system() と print`` の違いは
$a = system(date);
print $a;
systemの戻り値はその処理が成功したかどうかを返す。(成功したら0が返ってくる)
$a = `date`;
print $a;
printの戻り値はその処理の結果そのものを返す。
サブルーチンに複数の配列を直接渡したい場合
バックスラッシュ( \ )付きの型は、引数が絶対にその変数型でなければいけないことを示す。
例
sub func( \% );
上記のサブルーチン宣言は、1つのハッシュ変数を受け取る。
逆に、バックスラッシュなしの @ と % は、残りすべての引数を飲み込んで、
リストコンテキストを強制する。
たとえば、次のようなプロトタイプ付きサブルーチンを宣言した場合、
2つの配列を引数として渡しても、1つの配列にまとめて渡されてしまう。
例
my @array1 = (1,2,3);
my @array2 = (A,B,C);
&func( @array1, @array2 );
sub func(@@){
my (@a, @b) = @_; こうすると、@aにすべてまとめてもっていかれる
print @a, ":", @b, "\n";
}
<実行結果>
123ABC: :を123とABCのまんなかにもって行きたいのに、もっていけない
このようなときは、バックスラッシュ( \ )をプロトタイプシンボルの前につけて、
複数の配列やハッシュを受け取らないように指定する。
例
my @array1 = (1,2,3);
my @array2 = (A,B,C);
# 複数の配列だとエラーになるので、配列のリファレンスを渡している
&func( \@array1, \@array2 );
sub func(\@){
my ($a, $b) = @_;
print @$a, ":", @$b, "\n";
}
<実行結果>
123:ABC :が123とABCのまんなかにちゃんときている
配列について
http://www.rfs.jp/sb/perl/02/07.html
プロトタイプについて
http://perl-users.jp/modern_introduction_perl/sub_prototype.html
index関数
index ( 全体文字列, 検索文字列, 開始位置 )
index ( 全体文字列, 検索文字列 )
「全体文字列」の中で、「開始位置」の位置から「検索文字列」が最初に出現する位置を返す。
「開始位置」が省略されると、先頭から検索する。(先頭の位置は 0 とする)
検索して見つからなければ -1 を返す。
例
$str = "ABCDEF"; 探しに行く文字
$sub = "CD"; 実際に探す文字
$find = index ($str, $sub);
if ($find >= 0) {
$find++; 最初が0からスタートなので、+1にすると何番目と表記できる
print "先頭から$find番目に見つかりました。\n";
} else {
print "見つかりませんでした。\n";
}
複数見つけたい場合の例
$str = "apple orange banana";
$sub = "a";
while ( ( $find = index ($str, $sub, $find ) ) >= 0 ) { 開始位置をずらしていく方法
$find++; -1(偽)を返すまで繰り返す
print "$find番目に発見。\n";
}
substr関数
例1▼文字列の取り出し
$word = "milktea";
$str = substr($word, 0, 4); 最初から4文字、つまり「milk」のこと
print "$str\n";
<出力結果>
milk
例2▼文字列の追加
$word = "tea";
substr($word, 0, 0) = "milk"; 0,0の場所から「milk」を追加する
print "$word\n";
<出力結果>
milktea
例3▼文字列の置き換え
$word = "milktea";
substr($word, 0, 4) = "lemon"; 最初の4文字を「lemon」に置き換える
print "$word\n";
<出力結果>
lemontea
例4▼文字列の削除(先頭から削除)
$word = "milktea";
substr($word, 0, 4) = ""; まぁ、空白に置き換えみたいな
print "$word\n";
<出力結果>
tea
例5▼文字列の削除(末尾から削除)
$word = "milktea";
substr($word, -3, 3) = ""; 末尾から検索するには、-をつける
print "$word\n";
<出力結果>
milk
BEGIN
javaでいうコンストラクタ。ファイルが読み込まれた時点で実行される
例
print "aaa\n";
BEGIN { この中の処理を最初にやる
print "BEGIN!\n";
}
<実行結果>
BEGIN! そのため、BEGIN!がはじめに表示される
aaa
END
スクリプトの終了時点で実行される。dieした場合でも実行される。
例
END { この中の処理は最後にやる
print "END!\n";
}
print "aaa\n";
<実行結果>
aaa そのため、aaaがはじめに表示される
Perl目次に戻る
別館TOPに戻る
ブログに戻る

Presents by 【BloodyRosary】
Copyrights (C) NEXON Corporation and NEXON Co., Ltd.
Rights Reserved.