Perl日記

日々の知ったことのメモなどです。Perlは最近やってないです。

2010-10-01から1ヶ月間の記事一覧

祝福オブジェクトを祝福する

一度 bless で祝福されたオブジェクトをもう一度 bless で祝福するとどうなるんだろうと思ってやってみた。 #!/usr/bin/env perl use strict; use warnings; package Animal; sub new { my ($class, $args) = @_; bless $args, $class; } package Iron; sub …

内部文字列からUTF-8にするにはencode_utf8()を使う

あるいは、UTF-8のバイト文字列からフラグのついた内部文字列にするには、decode_utf8()を使う。 そのものっぽい名前だし。 普通のencode('utf8', $str)、decode('utf8', $str)よりも、処理速度がその方が早いようだ。 #!perl use strict; use warnings; use…

二つの変数を相互に入れる

・仕様 $aaa と $bbb という変数があり、中身はあるかもしれないし、ないかもしれない。 $aaa に値がないときには $bbb を $aaa に入れる。 $bbb に値がないときには $aaa を $bbb に入れる。 $aaa, $bbb ともに中身がない、というのは存在しない こう考えた…

相互に use すると -c で redefine になる

たとえば、Util1.pm と Util2.pm があって、それぞれ相互に use しているとする。 Util1.pm は Util2.pm の関数を使っているし、逆も同様。 Util1.pm package Util1; use strict; use warnings; use Util2; sub multiple { my ($i, $j) = @_; my $sum = 0; #…

ループ内のサブルーチン内からnext

Perl初級者のコードを見ていたら、ループ送りの next をループの中で呼んでいるサブルーチンの中でやっていた。 #!/usr/bin/env perl use strict; use warnings; LOOP : for my $i (1 .. 10) { add2($i); print "$i at LOOP.\n"; } sub add2 { my $i = shift…

print()とカッコと三項演算子

2秒くらいはまったのでメモ。 これはok。 print 1 == 1 ? 'ok' : 'ng'; #=> ok これもok。 print 'foo' eq 'foo' ? 'ok' : 'ng'; #=> ok これはng、というか1。 print ('foo' eq 'foo') ? 'ok' : 'ng'; #=> 1 1は「eq」の返却値の「true」。 なのでこれと同…

evalではstrict 'refs'でも展開(?)できる

こちらを見て。 404 Blog Not Found:perl - 実践で役立たないPerl正規表現 完全解説 そうか、evalって重ねられるんだと思ってやってみたらできた。 use strict; use warnings; my $aaa = 123; my $bbb = '$aaa'; my $ccc = '$bbb'; say eval eval eval $ccc;…