sub mysay (;+@) { return say $_ unless @_; if ( ref $_[0] eq 'ARRAY' ) { unshift @_, @{shift()} } elsif ( ref $_[0] eq 'HASH' ) { unshift @_, %{shift()} } say join "\n", @_; } #### #!/usr/bin/env perl use warnings; use strict; use feature 'say'; $_ = "Foo"; my @x = ("x", "y"); my @y = (); my $z = "Bar"; my %h = ( abc => 123 ); { local $, = "\n"; say; say "------"; say $z; say "------"; say "Hello"; say "------"; say "cool", "world"; say "------"; say @x; say "------"; say "foo", @x; say "------"; say @y; say "------"; say %h, "xyz"; say "######"; } sub mysay (;+@) { return say $_ unless @_; if ( ref $_[0] eq 'ARRAY' ) { unshift @_, @{shift()} } elsif ( ref $_[0] eq 'HASH' ) { unshift @_, %{shift()} } say join "\n", @_; } mysay; say "------"; mysay $z; say "------"; mysay "Hello"; say "------"; mysay "cool", "world"; say "------"; mysay @x; say "------"; mysay "foo", @x; say "------"; mysay @y; say "------"; mysay %h, "xyz"; say "######";