Если $r
исходит от @ARGV
, у него не будет content_type
метода.
Вы можете потенциально bless
$r
в какой-то пакет, но это, конечно, не то, что выВы собираетесь сделать здесь.
Я предполагаю, что вы хотите получить параметр CGI, вероятно, POST
ed файл загрузки?Таким образом, вы хотите, чтобы $r
был CGI
объектом, а не параметром.Вы начнете с
my $r = CGI->new;
Но затем я отсылаю вас к очень хорошему руководству по CGI
, http://perldoc.perl.org/CGI.html или perldoc CGI
из оболочки.
(Чтобы немного расширить:)
В Perl, $ scalar var содержит «что-нибудь одно».Вещи, поступающие из командной строки, обычно являются строками (возможно, числами в хороший день);это то, что shift
получит на верхнем уровне.(Специальная переменная @ARGV
содержит параметры командной строки, передаваемые в вашу программу.)
«Одна вещь» также может быть ссылкой на объект.В объектно-ориентированной модели Perl методы пакета ("класс") привязаны к этой ссылке с помощью bless
.Это обычно обрабатывается для вас, хотя;специальная подпрограмма (она же функция, метод) CGI::new
создаст новый объект CGI
с некоторыми данными состояния (например, значения полей формы) и bless
его в пакет CGI
.
Запись ->
при вызове функции будет работать, только если ваша переменная содержит bless
ed ссылку.Вы можете «спросить», какая у вас ссылка на переменную, используя ref
;вы получите имя его пакета (он же класс).($foo = []; bless $foo => 'Some::Package'; print ref $foo;
=> Some::Package
)
- Но, опять же, для вашего конкретного случая, посмотрите некоторые примеры в руководстве по модулю CGI
: -)