Недавно я увидел какой-то Perl-код, который смутил меня.Я вынул все дополнительные части, чтобы посмотреть, как это работает, но я до сих пор не понимаю, почему это работает.
По сути, я создал этот фиктивный "модуль" (TTT.pm):
use strict;
use warnings;
package TTT;
sub new {
my $class = shift;
return bless {'Test' => 'Test'}, $class;
}
sub acquire {
my $tt = new TTT();
return $tt;
}
1;
Затем я создал этот скрипт для использования модуля (ttt.pl):
#!/usr/bin/perl
use strict;
use warnings;
use TTT;
our $VERSION = 1;
my $tt = acquire TTT;
print $tt->{Test};
Строка, которая меня смущает, я думал, что она не будет работать, это:
my $tt = acquire TTT;
Я думал, что это не сработает, поскольку сабвуфер "никогда не экспортировался".Но это работает.Я был сбит с толку "TTT" после звонка на приобретение, поэтому я удалил его, оставив строку так:
my $tt = acquire;
И он жаловался на голое слово, как я и думал.Я добавил парены, как это:
my $tt = acquire();
И он пожаловался, что не было main::acquire
, как я думал, что будет.
Я привык к доступным подпрограммамк объекту или экспортируемым подпрограммам, но я никогда не видел, чтобы вызывали подпрограммы с именами пакетов в конце.Я даже не знаю, как искать это в Google.
Итак, мой вопрос: как работает добавление имени пакета после вызова подпрограммы?Я никогда не видел ничего подобного раньше, и, вероятно, это не очень хорошая практика, но кто-то может объяснить, что делает Perl?
Спасибо!