Не понятно, что вызывает ошибку в вашем коде. Смотрите следующий пример кода, который выполняет ту же работу немного по-другому.
use strict;
use warnings;
use feature 'say';
use JSON;
use Data::Dumper;
my $file = do { local $/; <DATA> };
my @data = decode_json($file);
say Dumper(\@data);
__DATA__
[
{
"val": "test1",
"reg": "m/^(match)/"
},
{
"val": "test2",
"reg": "m/^(match)/"
},
{
"val": "test3",
"reg": "m/^(match)/"
},
{
"val": "test4",
"reg": "m/^(match)/"
}
]
Вывод
$VAR1 = [
[
{
'val' => 'test1',
'reg' => 'm/^(match)/'
},
{
'val' => 'test2',
'reg' => 'm/^(match)/'
},
{
'val' => 'test3',
'reg' => 'm/^(match)/'
},
{
'reg' => 'm/^(match)/',
'val' => 'test4'
}
]
];