たつをの ChangeLog : 2006-11-28

「はてなブックマーク」からの棚卸、最終回。
とりあえず一段落。今回は古めのが多いです。

- hail2u.net - Weblog - permalinkのスタイルを変えた
  http://hail2u.net/blog/webdesign/change-permalink-style.html
  Googleでは、単語間が"_"だとひとくくりの単語とされてしまうそう。

- O'Reilly Village / オラの村: Mind Hacksの著者Mattさんからのメッセージ
  http://www.oreilly.co.jp/editors/archives/000084.html

- XML::Simple は遅い説における意外な落とし穴 (iandeth.)
  http://iandeth.dyndns.org/mt/ian/archives/000589.html

- ベイエリア情報局: Yahoo でカスタマイズされた apache のまとめ
  http://blog.bz2.jp/archives/2006/01/yahoo_apache.html

- 83's : MeCab用、2ちゃんねる辞書
  http://fg-180.katamayu.net/archives/2005/09/11/183147

- SUZU CAFE(スズカフェ)…渋谷 - [カフェごはん]All About
  http://allabout.co.jp/gourmet/cafegohan/closeup/CU20060501A/index.htm
  どんなんだか行ってみたい。

- 4コマ漫画自動生成
  http://cgi2.tky.3web.ne.jp/~nenpa/sub/saxyun/r4cm/r4cm_nowork.cgi
  よくわかんないけど、シュールなのなら自動生成でもありか。

- おでんトマト - 王様トマト(サカタのタネ)
  http://www.sakataseed.co.jp/syouhin/ousama/ousama-tomato.html#anchor06
  おでんトマトの作り方。

- 仮想プリンターとして動作するフリーのPDF文書作成ソフト「CutePDF Writer」
  http://www.forest.impress.co.jp/article/2006/06/09/cutepdfwriter.html

- PDF文書結合やパスワード設定も可能なフリーのPDF作成ソフト「PDF reDirect」
  http://www.forest.impress.co.jp/article/2006/02/16/pdfredirect.html

- 無料登録ドットコム - キーワードアドバイスツールプラス
  http://www.muryoutouroku.com/free/keyplus1.html

- [観] 新手のトラックバックスパム発生装置
  http://watcher.moe-nifty.com/memo/2005/10/post_475b.html
  今思えばこれって Trackback Auto Discovery 削除で対策できるか。

Perl で配列をシャッフルする方法のメモ。
最近よく使うので。

Matthew McEachen :: Hints & Kinks :: shuffle in perl
http://matthew.mceachen.us/archives/000034.html
use strict;
use List::Util 'shuffle';

my @lines = <>;
print shuffle( @lines );

Recipe 4.17. Randomizing an Array (Perl Cookbook)
http://www.unix.org.ua/orelly/perl/cookbook/ch04_18.htm
# fisher_yates_shuffle( \@array ) : generate a random permutation
# of @array in place
sub fisher_yates_shuffle {
    my $array = shift;
    my $i;
    for ($i = @$array; --$i; ) {
        my $j = int rand ($i+1);
        next if $i == $j;
        @$array[$i,$j] = @$array[$j,$i];
    }
}

行単位でシャッフルする簡単なスクリプト shuffle.pl を作ってみた。
#!/usr/bin/perl
use strict;
use warnings;
use List::Util 'shuffle';
my @results = (<>);
print shuffle(@results);

Perl の話。
関数の引数でリファレンス渡しでなくても、
関数内部でその変数の値を直接変更できちゃうのかあ。
Encode の from_to で、使われていた方法で、
ちょっとローカルで話題になった。

以下、実験してみたスクリプト:
#!/usr/bin/perl
use strict;
use warnings;
 
my $status = "hello";
print "$status\n";
happy(\$status);
print "$status\n";
tired($status);
print "$status\n";

sub happy {
   my ($s_ref) = @_;
   $$s_ref = "lucky";
}

sub tired {
   $_[0] = "goodbye";
}

Perl ベストプラクティス」より(p.194):
@_ の各要素が元の引数のエイリアスであることは忘れられがちである。
つまり、$_[0] を変更すれば、その変数を包含している変数を変更するこ
とになる。
「Perl ベストプラクティス」では「常に、まず @_ を展開する」と
述べられているので、 $_[0] を変更するような方法は推奨されてない。

「参照渡しでない引数が関数実行後に変更されている」というのは
違和感を感じる、というかトラブルの元だと思う。
なるべくやらないようにしよっと。

参考:
- Perl ベストプラクティス
- Google Code Search : "$_[0] = "
- perldoc Encode
この記事に言及しているこのブログ内の記事

たつをの ChangeLog
Powered by chalow