Linux 我应该如何找到几个可能字符的索引?

Linux 我应该如何找到几个可能字符的索引?,linux,perl,Linux,Perl,我意识到这个问题的名称并不能说明什么,但我不知道如何简单地解释它,所以这里有一个很长的版本 首先,这是我当前的代码: #! /usr/bin/perl use strict; use warnings; my $input; while (<>) { $input .= $_; } $input =~ s/ |\n//g; print "\n"; 我想做的是制作一个计算器,例如,当用户进行echo 8*5+21-15 |计算时,它将正确计算。这是我的思想进步。

我意识到这个问题的名称并不能说明什么,但我不知道如何简单地解释它,所以这里有一个很长的版本

首先,这是我当前的代码:

#! /usr/bin/perl

use strict;
use warnings;

my $input;
while (<>) {
        $input .= $_;
}
$input =~ s/ |\n//g;

print "\n";
我想做的是制作一个计算器,例如,当用户进行echo 8*5+21-15 |计算时,它将正确计算。这是我的思想进步。首先,我把字符串作为一个整体,去掉所有的空白字符。然后我想为它建立索引,以查找*、+、/或-。然后,我想将这些运算符之前的所有字符添加到字符串中,然后对字符串进行整型,然后对运算符之后的部分执行相同的操作,然后在它们之间执行操作。但实际上我对如何做到这一点没有多少线索。另外,我对Perl 3天的经验非常陌生,所以如果可能的话,请慢慢来


非常感谢。

如果您可以接受您的计算器将无法处理括号,请使用正则表达式为您解析字符串:

#!/usr/bin/env perl
use strict;
use warnings;

my @tokens = <STDIN> =~ /(\d+|\+|-|\*|\/)/g;
print "$_\n" for @tokens;
将打印

8
*
5
+
21
-
15

现在,您需要编写一些代码来对令牌进行正确的计算。如果您不尝试解析paren,这并不难,但如果您尝试解析paren,则需要编写一个递归解析器,这要困难得多。

echo 8*5+21-15 | perl-ne“print eval”阅读递归下降解析器;在尝试执行任何操作之前,您应该将该行作为一个整体进行解析。想象一下“3+5*8”;您可以先找到+号,但这需要等到您进行乘法运算后才能找到。对于perl初学者来说,这是一项相当复杂的任务,我认为这是为了学习。否则,你应该接受上面Fredrik的建议,简单地使用perl已经在运行的数学功能。好吧,我问我的一个朋友,他是否可以给我上一课或做点什么来测试我学到的东西。这是他给我的也许从简单的开始。。。我建议在进入perl语言的黑暗角落之前,先开始解决使用perl时的问题。
8
*
5
+
21
-
15