http://www.perlmonks.org?node_id=443075


in reply to Re: Escaping special characters in filename for Net::SCP
in thread Escaping special characters in filename for Net::SCP

$scp->put(quotemeta) yields:
Couldn't transfer `/real/file->name': \/real\/file\-\>name: No such file or directory
$scp->put(qq|'$_'|) yields:
Couldn't transfer `/real/file->name': bash: -c: line 1: unexpected EOF while looking for matching `''
bash: -c: line 2: syntax error: unexpected end of file
lost connection
D'Oh!

Replies are listed 'Best First'.
Re^3: Escaping special characters in filename for Net::SCP
by samizdat (Vicar) on Mar 29, 2005 at 15:45 UTC
    What a gross mess, blazar. Anything other than something like the following is not worth your time:
    use File::Copy; $basedir='/path/to/files'; $foo = $_; $foo =~ s#/#slash#g; $foo =~ s#->#arrow#g; $fubar = "$basedir/$_"; copy($fubar, "$basedir/$foo"); $scp->put("$basedir/$foo"); system('rm', "$basedir/$foo") && die "Can't remove $foo:$!\n";
    with appropriate my's and stricts as appropriate.
      I must say that in the meantime I've happily switched to Net::SFTP, so no more problems on the practical side of things. Still slightly curious if it would have been possible to do it with Net::SCP and if so, how. Net::SFTP seems a superior solution in any case...
        sftp is better than scp, so I'm not surprised that Net::SFTP is better. I don't know if scp is being kept up with all of the latest OpenSSH ports, either. Don't use it myself. :)

        In any event, glad you're past it! :D