Ловушки Perl
Истории-страшилки про Perl-программиста, с подсказками и разоблачениями
Главная
О блоге
Об авторах
Почему?
rss
@perltrapcom
При отладке предыдущего тестового скрипта (http://perltrap.com/http-demonyonok) программист добавил вывод url’а, по которому можно обратиться к свежезапущенному http-серверу:
use HTTP::Daemon;
use HTTP::Status;
# perl http_daemon.pl 10046
my $d = HTTP::Daemon->new(LocalPort => $ARGV[0]||8080) or die;
print "Please contact me at: <URL: $d->url >\n";
while (my $c = $d->accept) {
while (my $r = $c->get_request) {
if ($r->method eq 'GET'
&& $r->uri->path =~ m!^/tmp!
&& -f $r->uri->path
) {
$c->send_file_response($r->uri->path);
}
else {
$c->send_error(RC_FORBIDDEN);
}
}
$c->close;
undef($c);
}
Но вот ведь незадача…
Скрипт не печатал нормлаьный url.
А печатал вот такую ерунду:
Please contact me at: <URL: HTTP::Daemon=GLOB(0x22cf3e0)->url >
Perl’овая интерполяция в строках – это так удобно!
Интерполяция (подстановка) переменных – безусловно, очень удобное свойство строк. Но! Интерполируются только переменные, но не вызовы методов. Так что код стоило бы исправить так:
# perl http_daemon.pl 10046 my $d = HTTP::Daemon->new(LocalPort => $ARGV[0]||8080) or die; -print "Please contact me at: <URL: $d->url >\n"; +print "Please contact me at: <URL: ".$d->url." >\n"; while (my $c = $d->accept) {