Повсюду, особенно в DBI, я вижу, что это сообщение появляется постоянно. Это сбивает с толку, потому что первое, что приходит на ум, это то, что аргументы, которые я передаю функции, установлены в undef (или что-то подобное), но это явно не так.
Учитывая модуль и соответствующий скрипт ... .
Модуль: ./ lib / My / Module.pm
package My::Module;
use strict;
use warnings;
sub trim {
my $str = shift;
$str =~ s{ \A \s+ }{}xms; # remove space from front of string
$str =~ s{ \s+ \z }{}xms; # remove space from end of string
return $str;
}
Скрипт: ./ test.pl
#!/usr/bin/perl
use strict;
use warnings;
use My::Module qw(trim);
print $My::Module->trim( " \t hello world\t \t" );
Я получаю сообщение об ошибке
Не могу вызвать метод "trim " Относится ли это к контексту вызова метода (переданного здесь для печати) или контексту аргументов?
Этот синтаксис ищет объект или имя класса в переменной $My::Module
и вызывает его метод обрезки, но эта переменная не определена.
Вместо этого вы хотите просто сказать print My::Module::trim( " \t hello world\t \t" );
для вызова функции My::Module::trim() .
Судя по строке использования, вы пытаетесь импортировать trim() в локальный пакет, поэтому вы можете просто вызвать его без квалификации My::Module::
, но ваш модуль не похоже, он настроен для поддержки экспорта.
В ваших регулярных выражениях флаги /s и /m не имеют никакого эффекта — они только изменяют то, что совпадает с ., ^ и $, и вы не используете ни один из них.