我13岁时试图学习Perl。这是我的第一个脚本之一。该链接将用户带到下载图像的网页。由于一些细心的人可能会注意到该链接具有.png的结尾,该结尾指定了网址中的图像。当我运行此脚本时,它会打开Chrome,打开网址但未包含扩展名.png。我的问题是:
A)为什么会这样? B)任何人都可以建议替代方案或修复我的脚本。
脚本可在下面找到。
#!/usr/bin/perl
print "Type Username Here:
";
$username = <>;
print "Link: http://s3.amazonaws.com/MinecraftSkins/$username.png
";
exec "start www.s3.amazonaws.com/MinecraftSkins/$username.png";
请帮助!!!
答案 0 :(得分:4)
当您捕获数据时,您也会在其末尾捕获新行。
这会给你:
exec "start www.s3.amazonaws.com/MinecraftSkins/EXAMPLE
.png";
从输入数据的末尾删除空格以避免这种情况。
$username =~ s/\s+$//;
或
chomp($username);
答案 1 :(得分:3)
$username
将包含您在输入提示符下单击“enter”时触发的回车符,因此您的exec调用实际上看起来像两个单独的命令:
start www.s3.amazonaws.com/MinecraftSkins/$username
.png
尝试chomp($username)
去掉那个空格。
答案 2 :(得分:2)
您必须在输入结束处输入换行符:
#!/usr/bin/perl
print "Type Username Here:
";
chomp ( $username = <> );
print "Link: http://s3.amazonaws.com/MinecraftSkins/$username.png
";
exec "start www.s3.amazonaws.com/MinecraftSkins/$username.png";
您可以清理(确保用户输入仅包含字母,数字和/或字符下划线_
,用于示例)您可以通过以下方式修改:
#!/usr/bin/perl
print "Type Username Here:
";
$username = $1 if <> =~ /^([a-z0-9_]*)$/i;
print "Link: http://s3.amazonaws.com/MinecraftSkins/$username.png
";
exec "start www.s3.amazonaws.com/MinecraftSkins/$username.png";
写得更好(作为@KeithThompson评论):
#!/usr/bin/perl
print "Type Username Here:
";
if ( <> =~ /^([a-z0-9_]*)$/i ) {
$username = $1
print "Link: http://s3.amazonaws.com/MinecraftSkins/$username.png\n";
exec "start www.s3.amazonaws.com/MinecraftSkins/$username.png";
} else {
print "Error input contain invalid characters\n";
};