Я ищу подпрограмму mysub, которая должна вести себя так, чтобы следующие два вызова были практически одинаковыми.
mysub
mysub(["values", "in", "a", "list"]); mysub("Passing", "scalar", "values");
Каков правильный синтаксис, чтобы это произошло?
Проверьте, содержит ли @_ ссылку на один массив.
@_
sub mysub { if ( @_ == 1 && ref( $_[0] ) eq 'ARRAY' ) { # Single array ref } else { # A list } }
Предложение if проверяет, что передан только один аргумент, и является ли аргумент ссылкой на массив, используя ref.Чтобы убедиться, что случаи одинаковы:
if
ref
sub mysub { if ( @_ == 1 && ref( $_[0] ) eq 'ARRAY' ) { @_ = @{ $_[0] }; } # Rest of the code }