Следующий скрипт:
#!/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";
Выходы:
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()'"
Так что, если *main::foo = *main::bar;
не делает то же самое, что $main::{foo} = $main::{bar};
, я в растерянностиотносительно того, как обнаружить практическую разницу.;) Однако, с точки зрения синтаксиса, могут быть ситуации, когда проще использовать один метод по сравнению с другим.... всегда применяются обычные предупреждения о том, что они могут заглядывать в таблицу символов.