$files{$key}
действительно вернет значение этого ключа. Но что, если это значение окажется ложным в логическом контексте, например 0
или ''
(пустая строка)?
Рассмотрим хеш-код:
my %foo = ( red => 42, blue => 0, green => '', yellow => undef );
Если бы я сказал if ( $foo{blue} )
, условие не состоялось бы. Даже если в хэше существует blue
, условие ложно, поскольку значение $foo{blue}
равно нулю. То же самое с клавишами green
и yellow
- пустые строки и undef
являются ложными значениями.
Без exists
не было бы (простого) способа определить, действительно ли ключ хеша действительно существует и его значение равно false, или его нет вообще. (Вы можете назвать keys
, а затем grep
получившийся список, но это смешно.)
Ваш код выглядит отлично для меня. Вы используете exists
правильно.