2016-01-23 4 views
-2

У меня есть заявление на Perl, как один нижеPerl не идет об ошибках в разделе

seek DCMFReport.txt, $offset, 0 or die "Report seek error, offset:$offset - $!"; 

Когда он попадает в указанную выше строку, я получаю сообщение об ошибке «аргумент», но я не вижу текст штамп распечатан. Я ожидал увидеть ошибку «Ошибка запроса ...». Означает ли это, что код не попал в раздел штампа, несмотря на то, что в заявлении была сделана ошибка?

+0

Как у вас есть код, он попытается вызвать функцию 'DCMFReport()' и функцию 'txt()' и объединить возвращаемые значения обоих, а затем использовать это значение в качестве первого аргумента для 'seek' , Всегда 'использовать строгие' и' использовать предупреждения'! – simbabque

+0

, который сработал. что цитаты добавили в эту строку, если я могу спросить. Благодарю. – md1980

+0

У меня есть строгое использование и использование предупреждений – md1980

ответ

5

Потому что seek ожидает файловый дескриптор, который вам нужен до open файла в первую очередь. Имя файла не совпадает с файловым дескриптором.

use strict; 
use warnings; 

my $offset = 1; 

open my $fh, '<', 'DCMFReport.txt' or die $!; 
seek $fh, $offset, 0 or die "Report seek error, offset:$offset - $!"; 

Это даст вам сообщение о or die ошибки, если вы используете строку в качестве первого аргумента, поскольку seek операция не как значение не является дескриптор файла. Это нечто другое, как передача чего-то, чего не существует.

В документации сказано:

FILEHANDLE может быть выражением, значение которого дает имя дескриптором.

Строка - это выражение, поэтому она пытается работать с дескриптором файла с этим именем.

+0

@st хорошо, что определенно лучше, чем голой формулировки;;) – simbabque

+0

Это не сработало, я попытался открыть мой файл $, '<', $ filename или die $! ; – md1980

+0

Это не сработало, я попытался открыть мой файл $, '<', $ filename или die $ !; после чего следует искать $ file, $ offset, 0 или die "Report ... - это не идет к умирающему, на самом деле проблема была смещением, это было не числовое значение, которое приходило. Если я пройду числовое значение в смещении, сценарий работает нормально. Если передано нечисловое число, ошибка не переходит к штампу, весь скрипт запускается. Только время это работает, если я помещаю цитату вокруг имени файла в поиск – md1980