Hatena::Groupkeiroku

~DTPとかFlexとかFlashとかを中心に勉強中~

※初学者が右往左往しております。万が一記事内のスクリプトを利用される際は、恐れ入りますが自己責任にてお願いいたします。

2011-09-22

【Perl他】インクリメント/デクリメントで、基本は大事という話。

| 02:11

インクリメントとデクリメント(++演算子、--演算子)のはなし。

参考サイト:http://rfs.jp/sb/perl/02/03.html

 

引数の前についた場合、加算(減算)した後に値を返す。

#$bは未定義
$a = ++$b;
if($a){ print "good"; }
else{ print "bad"; }

$aには1が代入されて、printはgood。

 

引数のあとについた場合、加算(減算)する前に値を返す。見慣れた形。

#$bは未定義
$a = $b++;
if($a){ print "good"; }
else{ print "bad"; }

$aには0が代入されて、printはbad。

 

これを利用して、

foreach (@array) {
	push(@uniq,$_) unless $double{$_}++;
}

@arrayから重複を省いた配列@uniqが得られる。

 

ぇ? あ、そう、基本ですか。

ソーデスヨネー。

…あ、モノは投げないでクダサイ。

nngannga2011/09/23 13:48ここで
http://keiroku.g.hatena.ne.jp/nnga/20110909/1315571775
重複を削除するワンライナー(uniq)、(元ファイルの順番を保持)として書いた(unlessとif ! は同じ)
perl -ne 'print if!$line{$_}++' test.txt

あとこのページに
http://docstore.mik.ua/orelly/perl/cookbook/ch04_07.htm
%seen = (); @uniq = grep { ! $seen{$_} ++ } @list;
というやり方が載っていた。

日本語目次サイトはこちら
http://www.sarinaga.com/progtoy/perlcookbooklink.html

nngannga2011/09/23 22:54あとInDesignはドキドキしながら上書きしてます。