为什么perl会在通过CMD重定向网址时删除文件扩展名?

时间:2013-04-29 16:51:24

标签: perl url

我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";

请帮助!!!

3 个答案:

答案 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";

};