1

我 13 岁时正在尝试学习 Perl。这是我的第一个脚本之一。该链接将用户带到下载图像的网页。一些细心的人可能会注意到该链接以 .png 结尾,它指定了 url 中的图像。当我运行此脚本时,它会打开 Chrome,打开 url 但无法包含扩展名 .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";

请帮忙!!!

4

3 回答 3

4

当您捕获数据时,您也在捕获数据末尾的新行。

这给了你:

exec "start www.s3.amazonaws.com/MinecraftSkins/EXAMPLE
.png";

删除输入数据末尾的空格以避免这种情况。

$username =~ s/\s+$//;

或者

chomp($username);
于 2013-04-29T16:55:46.743 回答
3

$username将包括您在输入提示符下点击“enter”时点击的回车,因此您的 exec 调用实际上看起来像两个单独的命令:

start www.s3.amazonaws.com/MinecraftSkins/$username
.png

尝试chomp($username)去掉那个空白。

于 2013-04-29T16:55:59.150 回答
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";

};
于 2013-04-29T16:57:45.377 回答