Все три переменные, которые вы читаете, также содержат \n
в конце.
Удалите его с помощью chomp
.
chomp $username;
chomp $pass;
chomp $host;
Помните, что пароль будет виден на экране пользователя. Чтобы избежать эхо символов на экране.
Изменить
chomp
изменяет предоставленную переменную и возвращает количество удаленных символов. В вашем случае chomp($username)
вернет 1, поскольку он удалил один символ. Вы должны позвонить до scp
#!/usr/bin/perl
use strict;
use warnings;
use Net::SCP::Expect;
print "enter user name\n";
my $username = <>;
chomp($username); ### Here
print "enter password\n";
my $pass = <>;
chomp($pass); ### Here
print "enter host name\n";
my $host = <>;
chomp($host); ### Here
my $src_path = '/';
my $dst_path = '/';
my $scpe = Net::SCP::Expect->new(
user => $username,
password => $pass,
auto_yes => '1'
);
$scpe->scp( $host . ':' . $src_path, $dst_path );
Из связанной документации (выделено мной)
chomp( LIST )
chomp This safer version of "chop" removes any trailing string that
corresponds to the current value of $/ (also known as
$INPUT_RECORD_SEPARATOR in the "English" module). It returns the
total number of characters removed from all its arguments. It's
often used to remove the newline from the end of an input record
when you're worried that the final record may be missing its
newline. When in paragraph mode ("$/ = """), it removes all
trailing newlines from the string. When in slurp mode ("$/ =
undef") or fixed-length record mode ($/ is a reference to an
integer or the like; see perlvar) chomp() won't remove anything.
If VARIABLE is omitted, it chomps $_. Example:
while () {
chomp; # avoid \n on last field
@array = split(/:/);
# ...
}
If VARIABLE is a hash, it chomps the hash's values, but not its
keys, resetting the "each" iterator in the process.
You can actually chomp anything that's an lvalue, including an
assignment:
chomp($cwd = `pwd`);
chomp($answer = );
If you chomp a list, each element is chomped, and the total number
of characters removed is returned.
Note that parentheses are necessary when you're chomping anything
that is not a simple variable. This is because "chomp $cwd =
`pwd`;" is interpreted as "(chomp $cwd) = `pwd`;", rather than as
"chomp( $cwd = `pwd` )" which you might expect. Similarly, "chomp
$a, $b" is interpreted as "chomp($a), $b" rather than as
"chomp($a, $b)".
person
Matteo
schedule
19.01.2015