将运算符作为参数变量

大卫·洛里诺

您好我想创建只有四家运营商一个简单的计算器+, -, /*出于某种原因,我的实现不工作。

我见过几个工作实施方案(包括一些应得最模糊的一个奖项),但是我很好奇,想知道是为什么下面的工作?

#!/usr/bin/perl

my $num1 = $ARGV[0];
my $num2 = $ARGV[2];

my $operator = $ARGV[1];

print "$operator \n";

if($operator == '-')
{
  $num3 = $num1 - $num2;
  print "$num1 - $num2 = $num3\n";
} 
elsif($operator == "+")
{
  $num3 = $num1 + $num2;
  print "$num1 + $num2 = $num3\n";
}
elsif($operator == "/")
{
  $num3 = $num1 / $num2;
  print "$num1 / $num2 = $num3\n";
}
elsif($operator == "*")
{
  $num3 = $num1 * $num2;
  print "$num1 * $num2 = $num3\n";
}

此外,该命令./expr.pl 7 * 2返回以下内容:03.bellpaper.doc这是深不可测的。

三聚氰胺

始终以

use strict;
use warnings;

在你的情况下,首先导致

Global symbol "$num3" requires explicit package name (did you forget to declare "my $num3"?) at script line 14.

添加缺失的my $num3声明后,我们得到

Argument "-" isn't numeric in numeric eq (==) at script line 13.

发生这种情况是因为==运算符是数字相等。它将两个操作数都转换为一个数字,该数字(如果您不启用警告)会默默地0为无效字符串提供。这就是为什么($operand == '-')最终会这样做0 == 0,这当然是正确的。

要比较字符串,您需要使用eq

if ($operand eq '-')

另请参阅关系运算符perldoc perlop

问题./expr.pl 7 * 2在于这*是一个通配符,您的 shell 将其扩展为当前目录中所有文件的列表。您的程序将被调用为./expr.pl 7 03.bellpaper.doc expr.pl whatever-else-is-in-the-current-directory 2.

为了防止这种情况,您需要引用它,例如使用./expr.pl 7 '*' 2or./expr.pl 7 "*" 2./expr.pl 7 \* 2


其他注意事项:

  • $operand是错误的名字。是运营商。这两个数字是操作数。
  • 来自的手动分配$ARGV[...]可以合并为一个列表分配:my (...) = @ARGV;
  • print每个块中语句几乎相同。我们可以将它们拉出print "$num1 $operator $num2 = $num3\n"(在确保$num3实际设置之后)。

这给了我们:

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

my ($num1, $operator, $num2) = @ARGV;

print "$operator\n";

my $num3;
if ($operator eq '-') {
    $num3 = $num1 - $num2;
} elsif ($operator eq '+') {
    $num3 = $num1 + $num2;
} elsif ($operator eq '/') {
    $num3 = $num1 / $num2;
} elsif ($operator eq '*') {
    $num3 = $num1 * $num2;
}

if (defined $num3) {
    print "$num1 $operator $num2 = $num3\n";
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将数学运算符作为参数传递

来自分类Dev

如何将运算符作为参数传递

来自分类Dev

scala,将运算符作为函数的参数传递

来自分类Dev

RxJs:可以将运算符作为参数传播到管道运算符中吗

来自分类Dev

<=和>运算符作为函数参数

来自分类Dev

对象列表作为IN运算符的参数

来自分类Dev

使用扩展运算符作为参数

来自分类Dev

使用变量作为运算符-Powershell

来自分类Dev

C++:将运算符作为参数传递会导致错误“预期标识符”

来自分类Dev

如何以干净的方式将运算符作为参数传递?

来自分类Dev

将类作为参数传递给printf()时要重载的运算符

来自分类Dev

C#将按位运算符作为参数传递

来自分类Dev

C#将按位运算符作为参数传递

来自分类Dev

如何通过运算符<<将字符串作为参数?

来自分类Dev

将 lodash every() 函数作为参数传递给 Rx.JS map() 运算符

来自分类Dev

正确使用波浪号运算符作为输入参数

来自分类Dev

通过运算符重载作为模板参数

来自分类Dev

数组作为scanf的函数参数。地址运算符

来自分类Dev

在C ++中将运算符作为参数发送

来自分类Dev

在运算符重载中使用“ const”作为参数

来自分类Dev

如何在Ruby中将运算符作为参数传递?

来自分类Dev

在方法中将关系运算符作为参数传递

来自分类Dev

使用运算符(或综合函数)作为参数

来自分类Dev

如何通过数值运算符作为参数?

来自分类Dev

如何传递重定向运算符'>'作为execv的参数?

来自分类Dev

熊猫系列运算符作为功能参数

来自分类Dev

派生运算符<接收基础对象作为参数

来自分类Dev

如何重载>>运算符以获取变量参数列表

来自分类Dev

将python运算符“ <<”作为C ++ iostream重载

Related 相关文章

热门标签

归档