Pull to refresh

Comments 15

Немного просмотрел код
sub _read_file()
{
  my ($this, $file_path) = @_;
  open FILE, "<", $file_path or die "Can't open file: $!\n";
  $/ = undef;
  my $content = <FILE>;
  return $content;
}
 

1. Вы глобально переопределили $/
Надо:
local $/ = undef;

2. Для файлового дескриптора лучше использовать локальные переменные,
open my $FILE, "<", $file_path or die "Can't open file: $!\n";

3. И после, лучше закрывать чтение
close $FILE;

Зачем вообще велосипед?


use File::Slurp;

my $content = read_file $file_path;

...
Спасибо, так короче! Вообще хотелось поменьше зависимостей от сторонних модулей…

Если у вас нет каких-нибудь очень специальных требований к коду, то подход "поменьше зависимостей" будет весьма контрпродуктивным. Как выясняется, даже простое чтение данных из файла может оказаться весьма непростым — зачем вам писать свой код и открывать потенциальный вектор для проблем, если уже есть модуль, решающий эти проблемы?

Спасибо, не знал. Почитав обсуждение бага со слоями i/o и декодированием UTF-8, проникся… Чьорт побери, в какие сложные времена мы живём, если даже банальное чтение файла целиком в память оказывается совершенно нетривиальным делом. ;(

  1. И после, лучше закрывать чтение

JFYI, при использовании лексической переменной для i/o файл будет закрыт автоматически при выходе из блока. Закрывать явно конечно лучше, но на всякий случай — катастрофы не будет. :)


А вот когда вместо лексической переменно используется file glob как в оригинальном коде, то файл автоматически закрываться не будет и код будет "течь" файловыми дескрипторами.

Выпустил Net::Ethereum версии 0.28.
Исправлены методы:

— _read_file
— wait_for_contract
— wait_for_transaction

Добавлены методы:

— eth_getTransactionByHash
Sign up to leave a comment.

Articles