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に戻る
ブログに戻る

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