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;
...
Если у вас нет каких-нибудь очень специальных требований к коду, то подход "поменьше зависимостей" будет весьма контрпродуктивным. Как выясняется, даже простое чтение данных из файла может оказаться весьма непростым — зачем вам писать свой код и открывать потенциальный вектор для проблем, если уже есть модуль, решающий эти проблемы?
Сейчас обычно рекомендуют File::Slurper
- И после, лучше закрывать чтение
JFYI, при использовании лексической переменной для i/o файл будет закрыт автоматически при выходе из блока. Закрывать явно конечно лучше, но на всякий случай — катастрофы не будет. :)
А вот когда вместо лексической переменно используется file glob как в оригинальном коде, то файл автоматически закрываться не будет и код будет "течь" файловыми дескрипторами.
Исправлены методы:
— _read_file
— wait_for_contract
— wait_for_transaction
Добавлены методы:
— eth_getTransactionByHash
Если после прочтения этой статьи у вас появились вопросы и захотелось узнать больше, приглашаю на авторский курс Создание смарт-контрактов Solidity для Ethereum.
Модуль Net::Ethereum для работы с контрактами Solidity