Các kịch bản sau đây:
#!/usr/bin/env perl
#mytest.pl
no warnings;
$bar = "this";
@bar = qw/ 1 2 3 4 5 /;
%bar = qw/ key value /;
open bar, '<', 'mytest.pl' or die $!;
sub bar {
return "Sub defined as 'bar()'";
}
$main::{foo} = $main::{bar};
print "The scalar \$foo holds $foo\n";
print "The array \@foo holds @foo\n";
print "The hash \%foo holds ", %foo, "\n";
my $line = <foo>;
print "The filehandle 'foo' is reads ", $line;
print 'The function foo() replies "', foo(), "\"\n";
Đầu ra:
The scalar $foo holds this
The array @foo holds 1 2 3 4 5
The hash %foo holds keyvalue
The filehandle 'foo' is reads #!/usr/bin/env perl
The function foo() replies "Sub defined as 'bar()'"
Vì vậy, nếu *main::foo = *main::bar;
không làm điều tương tự như $main::{foo} = $main::{bar};
, tôi đang ở một mất mát như thế nào để phát hiện một thực tế Sự khác biệt. ;) Tuy nhiên, từ góc độ cú pháp, có thể có những tình huống dễ sử dụng hơn so với phương pháp khác. ... các cảnh báo thông thường về việc nhét xung quanh trong bảng biểu tượng luôn luôn áp dụng.
Tôi tò mò điều gì đã mang lại điều này. :) –
Nguyên nhân trước đây gây ra lỗi khi được bật 'nghiêm ngặt' hoặc nghiêm ngặt. – MkV
Tôi đã viết một vòng lặp để bí danh một vài tên phương thức với nhau và bắt đầu tự hỏi tại sao tôi luôn viết '{no strict' refs '; * {'some :: pkg'. $ new} = * {'một số :: pkg'. $ cũ} 'khi' $ một số :: pkg :: {$ new} = $ một số :: pkg :: {$ cũ } 'cũng sẽ hoạt động tốt. Trực giác chúng có vẻ giống nhau, nhưng những thứ như quan hệ/quá tải/ma thuật khác có thể có hậu quả "thú vị" nếu chúng xử lý bản sao khác nhau, hoặc là lỗi hoặc hành vi dự định. –