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

Quine を書いてみる、エラー

Perl インタプリタに書けたらエラーが発生するスクリプトを書いてみた。エラー出力がスクリプトに等しい、エラー Quine。 syntax error at a.pl line 2, at EOF Execution of a.pl aborted due to compilation errors. 実行結果。 [takeyuki@sunya ~]$ perl …

Quine を書いてみる、標準出力と標準エラー出力に出力

標準出力だけでなく、標準エラー出力する Quine を書いてみた。やってみてわかったことは、たいして面白くないってこと。ヒアドキュメント + 正規表現置換技、とはまったく別の方法の Quine を考える方が面白いだろう。 use strict; use warnings; my $x = <…

必須の引数とオプショナルな引数の順序に悩む修行

あるクラス Stuff のコンストラクタには文字列を渡す。 my $stuff = new Stuff($string); で、オプショナルな引数は名前つきの引数で渡したい。そのとき、こういう風に書くのはどうだろうか。 my $stuff = new Stuff(code => q/353/, flag => 1, $string); #…

foreach を last で抜けるとループ変数の値は保存されない

変数をループで回しながら、特定の条件にマッチしたところでループを抜け出し、条件にあった変数値を得たい、というときがある。そんなとき、次のようなコードを書いていた。 use strict; use warnings; my @candidates = qw/this is a test/; my $code; PRE…

$hash{ リスト } と書けないので

配列の場合は $array[リスト] と添字を指定して新たなリストが作れる。 $ perl -e '@x=(0..5);@y=@x[2,1,4];print @y' 214 ハッシュの場合も $hash{リスト} とキーを指定して新たなハッシュを作るか、そのキーの値のリストができるかすると嬉しい。 [takeyuk…

先頭 n 行と末尾 n 行を出力するワンライナー

awk

先頭 n 行を見たいときには head を使う。末尾 n 行を見たいときには tail を使う。先頭 n 行と末尾 n 行を見たいときがある。head が「後略」で tail が「前略」だとすると、結果の「中略」を見たいときなんかに使う。次のようにしてみた。 [takeyuki@sunya…

簡単で、ポータブルでなくて、低速な、国際化ドメイン変換モジュール

国際化ドメインをエンコード、デコードしたい。CPAN シェルを使ってインストールできるモジュールはなさそう (Punycode の encode/decode はどのモジュールを使えばいいのか考える修行 - 昨日知ったこと) なので自分で Pure Perl なモジュールを書かないとか…

firefox がエラーを出した

ASSERT: *** Search: _installLocation: engine has no file! Stack Trace: 0:ENSURE_WARN(false,_installLocation: engine has no file!,2147500037) 1:() 2:() 3:() 4:epsGetAttr([object Object],alias) 5:() 6:SRCH_SVC_getEngineByAlias(http://weather…

for では $. はカウントされない

golferPerl の偉い人には常識なんだろうけれど。現在の入力ファイル行番号 $. は、for ではカウントされない。while だとカウントされる。 [takeyuki@sunya ^]$ cal | perl -e 'print$..$_ for<>' 8 2月 2010 8日 月 火 水 木 金 土 8 1 2 3 4 5 6 8 7 8 9 1…

2010-02-19の読みさし

ズッコケである。面白い。「これは意外な展開 !」とか「なんとそんな伏線が !!!」とかいうのはないんだけど、でも飽きずに読める。 こちらズッコケ探偵事務所 (こども文学館 40):100% こちらズッコケ探偵事務所 (こども文学館 40)作者: 那須正幹,前川かずお…

Quine を書いてみる、bc

久しぶりに anarcy golf。bc で Quine を書いた。2 bytes。1 byte にできなかったのがくやしい。anarchy golf - Quine

Quine を書いてみる、ヒアドキュメントを使わずに

ヒアドキュメントを使わずに Quine を書いてみた。予想どおりヒアドキュメントを使うよりもサイズが大きい。s///;print を使う技ではこれが限界なんだろうか。 $,=chr(39);$_='$,=chr(39);$_=u;s/u/$,$_$,/;print';s/u/$,$_$,/;print [takeyuki@sunya ~]$ pe…

ここにも my が書けるのか

my ($x, $y) = ... という形だけではなく、 (my $x, $y) = ... という形も書ける。というか、 (my $x, my $y) = ... を簡潔に書いたのが my ($x, $y) = ... なのか。 use strict; use warnings; my ($x, $y) = qw/abc def/; { (my $x, $y) = qw/123 456/; } …

Quine を書いてみる、ヒアドキュメントをわかりやすく

use strict; use warnings; sub cut { my $s = shift; $s =~ s/^ //mg; $s; } my $s = cut <<'__EoD__'; use strict; use warnings; sub cut { my $s = shift; $s =~ s/^ //mg; $s; } my $s = cut <<'__EoD__'; x my $t = $s; $t =~ s/^/ /mg; $s =~ s/x/$t\…

似たもの

横棒 Unicode Character 'EM DASH' (U+2014) Unicode Character 'HORIZONTAL BAR' (U+2015) Unicode Character 'MINUS SIGN' (U+2212) Unicode Character 'KATAKANA-HIRAGANA PROLONGED SOUND MARK' (U+30FC) Unicode Character 'FULLWIDTH HYPHEN-MINUS' (U…

文字コードをぐぐる URI を生成するワンライナー

この文字は何? 記号? とかいうときに、そいつの文字コードを調べてぐぐってみたくなる。 とりあえず LANG=ja_JP.UTF-8 だとして。 [takeyuki@sunya pbird]$ echo http://www.google.com/search?q=U%2b`echo -n ・| iconv -f utf8 -t utf16be | xxd -p` htt…

全角数字の範囲指定 tr と正規表現との違い

tr では全角数字も範囲指定できるようだけど、正規表現ではダメみたい。 1[takeyuki@sunya pbird]$ perl -Mutf8 -e '$x=q/3/; $x =~ tr/0-9/0-9/; print $x,"\n"' 3 [takeyuki@sunya pbird]$ perl -Mutf8 -e '$x=q/3/; $x =~ s/0-9/x/; print $x,"\n"'…

テキストファイルをランダムに並べ替えるワンライナー

awk

テキストファイルをランダムに並べ替えたい。すぐ思い浮かぶのは、ランダムな数値を先頭フィールドに追加してソート、そのあと数値フィールドを削除、というもの。ただ、やりがちなのは (そしてたいていの場合、それで済むのだが (そのときに応じて使い捨て…

Quine を書いてみる、初

Quine、すなわち、自分自身を出力するコード、昔から興味はあったが書いたことはなかった。 短くもないし、とりたてて特別なトリックがあるわけでもないけど、初めて作った作品なので掲載。 use strict; use warnings; my $s = <<'__EoD'; use strict; use w…

超祝福されたオブジェクト

[takeyuki@sunya ~]$ perl -MData::Dumper -e 'my $x = bless bless bless bless bless bless bless bless bless bless bless {}; print Dumper($x)' $VAR1 = bless( {}, 'main' );

ある配列をある場所で切ってお尻と頭をくっつけた配列を作る

(a,b,c,d,e,f,g,h,i,j) という配列から、たとえば (e,f,g,h,i,j,a,b,c,d) という配列を作る。 use strict; use warnings; sub flip { my ($array_ref, $cut_index) = @_; return @{$array_ref} if $cut_index <= 0; my $max_index = $#{$array_ref}; return …

-P オプションをつけると動作が変わるスクリプト

次のスクリプトは z をいくつ出力するか。 use strict; use warnings; #define sleep(times) print q/z/ x times sleep(100); print "z\n"; [takeyuki@sunya ~]$ perl -P a.pl zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz…

金時豆 しあげ

下ゆでが済んだ金時豆のしあげをまかされた。下ゆでの時間が長かったからか、しあげの手際が悪かったからか、ぐちゃぐちゃしたあんこのような仕上りになってしまった。ま、そこがおいしいといえばおいしい。最後に一つまみ入れた塩も効いてる。

emacs で shell バッファを複数使う方法

emacs で M-x shell を実行すると、*shell* という名前のバッファが作られ、そこで shell が起動する。私はもっぱらそこで作業している。GNU screen や tmux などの端末多重化ツールを使っていれば、それらが端末に出力されたものの履歴を見たり、カット&ペ…

bit.ly に適当な英単語をつなげてどんなサイトに飛ぶか試してみる修行

ああ、くだらない。 bit.ly に適当な文字列をつなげてどんなサイトに飛ぶか試してみる。 j.mp でも同じところに飛ぶのかな。http://bit.ly/unau : 宗教的な SNS サイトだろかいや、ブラジルってことはフタツユビナマケモノという意味で unau を使ったのかも…

HASH(0x ... なページ集

いつまでそのままかわからないけど。 http://www.gurumeruku.jp/search.cgi?action=search&category_l=CTG200&category_s=CTG217&hit_per_page=30&offset_page=9 平均予算が「HASH(0x8b56684)円」 株式会社ロジスティック、「FTA/EPA」活用のた...|…

BASE64 年齢

BASE64 的年齢表示にすると、人は 8 歳で還暦を迎えることになる。「まだまだ大文字の若僧が」と言ったりする。 なんてことを考えている私は、今年 l (スモールエル) 歳です。Base64 - Wikipedia

プリプロセッサを利用したプログレスインジケータの試み

ユーザを待たせる長い処理を行う場合には、進行状況をユーザに知らせるプログレスインジケータを出すのが作法である。Perlベストプラクティス では、ユーティリティサブルーチンを使う方法 (10.16 節) と Smart::Comments を用いる方法 (10.17 節) を紹介し…

我が家にプーコがやってきた

我が家にプーコがやってきた

水炊きラーメン

今日は、いつもの手羽中水炊きにラーメンを入れて食べてみた。これがまたうまかった。こんな味のラーメンを出す店があったら常連になっちゃうだろうな、という出来。 ポイント。 やっぱり手羽中がうまい 手羽先や手羽元じゃなくて。 手羽中一本につき、水は …