sub mput { ... my ($sftp, $local, $remotedir, %opts) = @_; ... my $ignore_links = delete $opts{ignore_links}; my %glob_opts = (map { $_ => delete $opts{$_} } qw(on_error follow_links ignore_case wanted no_wanted strict_leading_dot)); ... my %put_opts = (map { $_ => delete $opts{$_} } qw(umask perm copy_perm copy_time block_size queue_size overwrite conversion resume numbered late_set_perm atomic best_effort sparse)); %opts and _croak_bad_options(keys %opts); ... #### sub put { ... my $cb = delete $opts{callback}; ... my $copy_perm = delete $opts{copy_perm}; ... my $copy_time = delete $opts{copy_time}; ...