这是我的提示:编写一个Perl程序,从命令行读入任意数量的字符串 按字母顺序显示它们。这就是我所拥有的:
#!/usr/bin/perl
use strict;
use warnings;
# read command line arguments
# verify correct input and display error and quit if input is valid
# (1) quit unless we have the correct number of command-line args
my $numargs = string $num_args = $#ARGV + 1;
if ( $num_args != 2 ) {
exit;
}
if ( $num_args > 2 ) {
my $num_args eq string
print "Enter multiple random strings of letters, separated by spaces: ";
exit;
}
# (2) If we get multiple command arguments, assume they are
# separate strings of random letters
my @string = ARGV
if ( $string eq ARGV ) {
my $string = ARGV;
}
# sort strings
my @sorted_string = sort @string;
# display sorted string
print "Here is your sorted list: "@sorted_string "\n";
我得到的错误是关于命名,但我的教授说我已经关闭了。非常感谢任何帮助!
答案 0 :(得分:6)
好的,看。堆栈溢出不是'修复我的功课'网站。
你的代码 - 它不是perl。 auct_lots_full
use strict;
实际上告诉您出了什么问题,但是您有这么多错误,很难理解。
所以 - 从头开始:
use warnings;
你打算这是什么意思?因为它已经错误地 这一行,所以你可以停在那里而不用费心去看你的其余代码(现在,但它有更多的错误)。
您:
#!/usr/bin/perl
use strict;
use warnings;
# verify correct input and display error and quit if input is valid
# (1) quit unless we have the correct number of command-line args
my $numargs = string $num_args = $#ARGV + 1;
声明$numargs
。 my
的变量上使用名为string
的函数(不存在) - 它也不存在。 也许你的意思是:
$num_args
或者,只要您需要my $num_args = @ARGV;
,就可以在标量上下文中使用@ARGV
。
但是你的代码存在进一步的问题,这表明你并不真正理解:
就perl而言,这意味着:
$num_args
是一行代码:
my $num_args eq string
print "Enter multiple random strings of letters, separated by spaces: ";
这没有多大意义。
my $num_args eq string print "Enter multiple random strings of letters, separated by spaces: ";
表示标量变量。 $
一个数组。但@
自动知道“字符串”和“数字”之间的区别。 perl
和$string
不是一回事。它们是完全不同的变量(但令人困惑的是,所以不要这样做)。 @string
(例如,就好像它是单个值),它将返回条目数的数字计数。请参阅:perldata context @ARGV
不是什么。 ARGV
是一个包含命令行参数值的数组。请参阅:perlvar @ARGV
没有,因为perl实际上没有“字符串”类型 - 它有标量。 (见perldata string
并退出 - 所以...基本上只能有两个你的代码参数。这与你的评论不一致。 我不会给你答案(你可能会被标记下来,因为你的教授也可以google),但作为一个提示 - 你可以按$num_args != 2
进行操作并给出你的规范,可以有大约一行实际代码来做你想要的。 (两个也许,如果你想传达一个关于缺乏输入的信息)
所以回溯一下。想想你实际上想要做什么。您知道'命令行中的'任意字符串'是@ARGV
。
答案 1 :(得分:1)
你的代码看起来像是在尝试随机的东西,希望其中一个可以工作。
if ( $num_args != 2 ) {
exit;
}
这是有效的Perl。如果$num_args
不等于2,它将退出程序。但是你对问题的定义告诉你写一个“读取任意数量字符串的Perl程序”。那么为什么要退出,如果你没有给出两个字符串?
if ( $num_args > 2 ) {
my $num_args eq string
print "Enter multiple random strings of letters, separated by spaces: ";
exit;
}
这不编译。我认为你在my $num_args eq string
结束时遗漏了一个分号。但即使这样也毫无意义。您认为string
是什么? eq
是一个比较运算符 - 您可能会尝试在此处使用它来进行赋值。
但是,除此之外,它没有逻辑意义。在上一部分中,如果$num_args
不等于2,则退出该程序。现在您要检查$num_args
是否大于2.唯一可能的值{{1}此时可以得到2.而且2永远不会超过2。
$num_args
其他甚至无法编译的东西。还有一个分号丢失,my @string = ARGV
if ( $string eq ARGV ) {
my $string = ARGV;
}
是一个文件句柄,而不是你认为它的数组。
你需要退后一步,仔细看看这个问题。并从逻辑上思考解决方案。编程是将问题分解为更小的步骤。如果你发现自己随意输入东西,希望能有所作为,那么就该抽出时间了。在街区附近散步,清理头脑。
Perl的使命是让这样的工作变得简单。解决问题的代码是一行。
ARGV
但请不要将其作为您的解决方案提交,除非您能解释它是如何运作的。