use Data::Dumper qw( Dumper );
sub remove_fives {
my $list = shift;
my $last = $list;
while (1) {
my $node = $last->[0];
last if !$node;
if ($node->[1] == 5) {
$last->[0] = $node->[0];
} else {
$last = $node;
}
}
}
my $list = [[[[undef, 3], 5], 1]];
remove_fives($list);
local $Data::Dumper::Indent = 0;
local $Data::Dumper::Terse = 1;
print(Dumper($list), "\n"); # [[[undef,3],1]]