Когда вы вызываете ваш конструктор class->new(...)
с аргументом имени файла, подпрограмма new
получает имя класса в качестве первого аргумента и имя файла в качестве второго аргумента.
В вашем конструкторе вы просто копируете значение $_[1]
(имя файла) в $self->{FileRef}
, но это значение не является ссылкой.
Поэтому при доступе к нему нет необходимости использовать удвоенный символ для разыменования значения.
Вы должны выполнить весь свой код со следующими двумя строками вверху, что поймает много ошибок для вас (включая попытку использовать строки как ссылки, когда они не являются ссылками):
use strict;
use warnings;
Эти две строки в основном переводят Perl из быстрого однострочного режима в режим, более подходящий для крупномасштабной разработки (улучшенная безопасность типов, проверка имен статических переменных и другие).
За обновление: если ваш код работает правильно при копировании строки, но не при разыменовании ее напрямую, может показаться, что вы столкнулись с проблемой ссылки на строку, сохраняющей последнюю позицию соответствия (g
флаг).
Попробуйте выполнить следующее:
my $fileContentsRef = $this->getFileContent;
pos($$fileContentsRef) = 0; # reset the match position
$$fileContentsRef =~ /Spaltenname.*?Datentyp.*?---\n(.*?)\n\n/gsmi;