Понимание фрагмента кода Perl

Я никогда не занимался программированием на Perl, но я смотрю на следующий код Perl, и это меня смутило:

sub read_pds
{
   my $bin_s;
   my $input_pds_file = $_[0];
  open(my $fh, '<', $input_pds_file) or die "cannot open file $input_pds_file";
  {
    local $/;
    $bin_s = <$fh>;
  }
  close($fh);
  return $bin_s;
}

Я смотрю на приведенный выше код и думаю, что он не вернет никакого значения, поскольку там не определен тип возвращаемого значения.

Но внизу он возвращает значение. Теперь как мне узнать, что это за тип значения, поскольку оно не показывает никакого значения, когда я добавляю на него часы с помощью Komodo ..

Любые идеи?


person Lost    schedule 30.01.2014    source источник


Ответы (2)


Получить первый аргумент, переданный вызову функции:

my $input_pds_file = $_[0];

Откройте файл для чтения:

open(my $fh, '<', $input_pds_file) or die "cannot open file $input_pds_file";

Устанавливает для разделителя входных записей значение none (по умолчанию - новая последовательность строк: CR, LF или CRLF):

local $/;

И прочитайте весь файл в переменную:

$bin_s = <$fh>;

Зачем читать весь файл сразу? Потому что "ромбовидный оператор": ‹> считывает данные из дескриптора, пока не найдет разделитель входной записи (который очищен выше).

И наконец, возвращает одну большую строку:

return $bin_s;
person msztolcman    schedule 30.01.2014

Perl не имеет типов, как вы о них думаете, но возвращаемое значение будет строкой (содержимое $input_pds_file. <$fh> читает одну строку / запись из $fh, и поскольку $/ (разделитель входных записей) установлен на undef, это будет весь файл.

person hobbs    schedule 30.01.2014
comment
Значит, он вернет весь файл и вернет строку? Я не уверен, как выглядит содержимое этого файла, потому что он имеет расширение .pds, но должно ли это быть не Byte []? - person Lost; 30.01.2014
comment
@Californication, который вы называете Byte[], perl вызывает строку. - person hobbs; 30.01.2014
comment
ок. Прошу прощения за недоразумение. - person Lost; 30.01.2014