, sen Perl deyimi ayrıştırmak bilir böylece ayraç dosya tanıtıcısından tutan başvuru kaydırmak gerekir: Perl En İyi Uygulamalar
print { $somehash{$var}{fh} } $foo;
Bölüm onunla o çatlak almamış her zaman sadece bu sebeple ayraç filehandles sarmak için söylüyor. Eski okul CGI.pm bu görmüş olabilir
method_name Object @arguments;
: print
bir dt nesne üzerinde dolaylı bir yöntemdir çünkü
sözdizimi garip. Neredeyse çalışıyor
use CGI;
my $cgi_object = new CGI 'cat=Buster&bird=nightengale';
my $value = param $cgi_object 'bird';
print "Indirect value is $value\n";
(Schwern's answer about the ambiguity bakınız) sürece amacı, basit bir sayısal alan olduğu gibi: İşte iki dolaylı yöntem aramalarıdır. Ancak, $cgi_object
bir hash koyarsanız, print
ile aldığınız aynı sözdizimi hatasını alıyorum. Çalışmasını sağlamak için parantezleri karma erişimin etrafına yerleştirebilirim. Eğer IO::Handle kullanmak zorunda olmasına rağmen, Sen filehandles Aynı işlemleri
my $cgi_object = CGI->new(...);
$cgi_object->param(...);
$hash{animals}{cgi}->param(...);
: hepsini biraz aksak var
my %hash;
$hash{animals}{cgi} = $cgi_object;
# $value = param $hash{animals}{cgi} 'cat'; # syntax error
$value = param { $hash{animals}{cgi} } 'cat';
print "Braced value is $value\n";
böylece sadece yerine her şey için ok biçimi kullanın: Önceki kod ile devam modülün herşeyi halletmesi için:
use IO::Handle;
STDOUT->print('Hello World');
open my($fh), ">", $filename or die ...;
$fh->print(...);
$hash{animals}{fh} = $fh;
$hash{animals}{fh}->print(...);
İstediğiniz herhangi bir şeyi "söyleyebilir". Bu zor çalışmak için oluyor :) –