x.x.x.x

| HOME | FrontPage | 記事編集 | RSS |

ヒアドキュメント中のハッシュ要素   Perl

  1. 1. とりあえずヒアドキュメントをやめようぜ

このエントリには結論が出ていません。Perlでヒアドキュメント中にハッシュ要素を記述すると、ときどき非表示になります。通常は表示される筈で、スカラーのデリファレンスも矢印演算子も問題なく使える筈です。今のところ発症事例はprefork+mod_perl2環境のみで、それも同じコードをリロードするたびに出たり出なかったり(preforkなのでプロセスが違うことは考えた。でもhttpdをリスタートしてからリロードを繰り返しても同じ現象が繰り返す)なので原因を特定しようがありません。

1. とりあえずヒアドキュメントをやめようぜ

同じコードをクオートで書き直したら問題が解消しました。つまり

print <<"_HEREDOC_";
<tr><td>$htmlname->{'NAME1'}</td><td>$htmlname->{'VALUE1'}</td></tr>
<tr><td>$htmlname->{'NAME2'}</td><td>$htmlname->{'VALUE2'}</td></tr>
_HEREDOC_

と買いていたものなら

print q|<tr><td>| . $htmlname->{'NAME1'} . q|</td><td>| . $htmlname->{'VALUE1'} . q|</td></tr>|
. q|<tr><td>| . $htmlname->{'NAME2'} . q|</td><td>| . $htmlname->{'VALUE2'} . q|</td></tr>|;

と書き直します。当然解決するでしょう。これで解決したということは、他の部分には問題が無かったということです。だいたいPerlのクオートってヒアドキュメントみたいなもんでしょ。ターミネータが1バイトのヒアドキュメントがクオートですよ。ヒアドキュメントの中に関数は書けないけど、クオートなら途中で切って関数を書ける。だいたいutf8になってからは変数毎に区切らないと変数展開が不安でしょうがない。だから

クオートで全部書こう。

しかしヒアドキュメント+ハッシュ要素で検索してもろくなページがヒットしない。ヒアドキュメントの中にハッシュ要素を書けるとも書けないとも誰も言わない。なんで彼らは人と同じことばかり書くんだろう。あえて貼り付けないけど漏れのドメインフィルタはPerl関連だけで既に30近いよ。

BlogMode speed member / 2008.10.26 15:27

These pages are designed for NN7 & IE6.
BBSWiki ver.1.50 Final blogmode.
Copyleft (!C) 2005-2007 SUICIDE BLONDE JP.
All Lefts Reserved.

Valid XHTML 1.0 Strict Valid CSS!