我意识到问题名称并没有真正说明,但我不知道如何解释它,所以这是长版本。
首先,这是我目前的代码:
#! /usr/bin/perl
use strict;
use warnings;
my $input;
while (<>) {
$input .= $_;
}
$input =~ s/ |\n//g;
print "\n";
我想做的是制作一个计算器,例如当用户执行echo "8 * 5 + 21-15" | calculate
时,它会正确计算。所以这是我的思想进步。首先,我将字符串作为一个整体并删除所有空格字符。然后我想索引()它出现*,+,/或 - 。然后我想在任何这些运算符之前将所有字符添加到字符串然后(int)字符串,然后对运算符之后的部分执行相同操作,然后在它们之间执行操作。但我实际上并没有太多关于如何做到这一点的线索。另外,我对Perl很新(3天经验)所以如果可能的话,请慢慢对我说。
非常感谢。
答案 0 :(得分:0)
如果您接受计算器无法处理括号,请使用正则表达式为您解析字符串:
#!/usr/bin/env perl
use strict;
use warnings;
my @tokens = <STDIN> =~ /(\d+|\+|-|\*|\/)/g;
print "$_\n" for @tokens;
这将为您提供一系列可以处理的令牌,所以
echo "8 * 5 + 21-15" | script.pl
将打印
8
*
5
+
21
-
15
现在由你来编写一些能够在令牌上进行正确计算的代码。如果你不尝试解析parens,这并不难,但如果你这样做,你需要编写一个递归解析器,这要困难得多。