Вызовы методов модуля Perl: невозможно вызвать метод «X» для неопределенного значения в строке $ {SOMEFILE} $ {SOMELINE}

Повсюду, особенно в 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 " Относится ли это к контексту вызова метода (переданного здесь для печати) или контексту аргументов?

6
задан heymatthew 30 August 2010 в 03:14
поделиться

1 ответ

Этот синтаксис ищет объект или имя класса в переменной $My::Module и вызывает его метод обрезки, но эта переменная не определена.

Вместо этого вы хотите просто сказать print My::Module::trim( " \t hello world\t \t" ); для вызова функции My::Module::trim() .

Судя по строке использования, вы пытаетесь импортировать trim() в локальный пакет, поэтому вы можете просто вызвать его без квалификации My::Module::, но ваш модуль не похоже, он настроен для поддержки экспорта.

В ваших регулярных выражениях флаги /s и /m не имеют никакого эффекта — они только изменяют то, что совпадает с ., ^ и $, и вы не используете ни один из них.

6
ответ дан 8 December 2019 в 12:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: