Все задачи

Http-демонёнок, продолжение

13 May 2013

При отладке предыдущего тестового скрипта (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.

Подсказка-2

Показать

А печатал вот такую ерунду:

Please contact me at: <URL: HTTP::Daemon=GLOB(0x22cf3e0)->url >

Подсказка-3

Показать

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) {