【问题标题】:String comparison is always true [duplicate]字符串比较总是正确的[重复]
【发布时间】:2021-11-28 21:07:51
【问题描述】:

这是我目前拥有的代码。在 Perl v5.8.9 上运行。

#!/usr/bin/perl
# Prompts the user for their desired configuration
print "\n";
print "Please type BB for breadboard, or ACU for the Audio Control Unit.\n";
print "Do you want a BB or ACU version of alarm programmer: ";
$a = <STDIN>;
if($a == "ACU"){
    print("Initiating alarm programmer for ACU...\n");
}else{
    print("Initiating alarm programmer for breadboard...\n");
}

这是一些示例输出:

C:\Users\U157280\Documents\Alarm Programmer>PerlAutonomy.pl

Please type BB for breadboard, or ACU for the Audio Control Unit.
Do you want a BB or ACU version of alarm programmer: ACU

Initiating alarm programmer for ACU...

还有一个:

C:\Users\U157280\Documents\Alarm Programmer>PerlAutonomy.pl

Please type BB for breadboard, or ACU for the Audio Control Unit.
Do you want a BB or ACU version of alarm programmer: BB

Initiating alarm programmer for ACU...

如您所见,即使语句看起来是正确的,它也会为两者选择 ACU

我做错了什么?

【问题讨论】:

  • 任何帮助将不胜感激!
  • 注意:您的 perl 版本相当旧(2007),第一时间更新到最新版本(5.34.0),Perl version history
  • 如果您对学习Perl 感兴趣,那么您将欣赏以下在线免费书籍Modern Perl。广泛的documentation 随时为您服务。
  • 在 Perl 中,不要将 $a$b 用于程序中的变量,因为它们是传递给 sort 的比较例程使用的特殊变量,而通常的 strict 规则不会适用于他们。

标签: string perl


【解决方案1】:

下面的代码 sn-p 是一个 OP 的修改代码,修正最少。

请在您的脚本中包含use strict;use warnings,它会警告您代码的潜在问题——从长远来看,它将为您省去很多代码更正的麻烦。

你应该使用字符串比较运算符eq而不是数字比较运算符==

#!/usr/bin/perl
#

use strict;
use warnings;
use feature 'say';

# Prompts the user for their desired configuration
say  '
   Available options:

       BB  -- for breadboard
       ACU -- for the Audio Control Unit

';

print '   Please make a choice: ';

my $choice = <>;

chomp($choice);

if( $choice eq 'ACU') {
        say "\n  Initiating alarm programmer for ACU...";
} elsif( $choice eq 'BB' ) {
        say "\n  Initiating alarm programmer for breadboard...";
} else {
        say "\n  Wrong choice...";
}

exit 0;

要运行外部命令或脚本,您应该使用system


参考:


【讨论】:

  • 谢谢,我想我在想 Python 和 ==。不胜感激。你知道如何从另一个 Perl 脚本调用一个 Perl 脚本吗?
  • 正如我在对调用 perl 脚本的回答中已经指出的那样,您应该使用 system 调用。
【解决方案2】:

试试这个:

#!/usr/bin/perl
# Prompts the user for their desired configuration
print "\n";
print "Please type BB for breadboard, or ACU for the Audio Control Unit.\n";
print "Do you want a BB or ACU version of alarm programmer: ";
$a = <STDIN>;
chomp($a);
if($a eq "ACU"){
    print("Initiating alarm programmer for ACU...\n");
}else{
    print("Initiating alarm programmer for breadboard...\n");
}

您有 2 个问题,首先,= 是分配而不是比较。其次,您在输入的末尾有一个换行符,您没有考虑到这一点。 chomp() 去掉换行符,eq 运算符执行字符串比较。

【讨论】:

  • 感谢您的快速回复,我试过了,但还是没有成功。我会将更新后的代码添加到原帖中。
  • 还有其他想法吗?
  • 非常感谢,效果很好!无论如何,您知道从另一个调用一个 Perl 脚本的简单方法吗?我已经尝试了几件事,但我没有运气。再次感谢!
  • 如果您知道该怎么做,我将不胜感激,因为我今晚正在努力完成这项任务
  • 我必须等九十分钟才能再次发帖:/。你有什么办法可以帮我做最后一件事吗?这真的会让我很开心
猜你喜欢
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-04
  • 1970-01-01
  • 2011-10-07
  • 2013-05-29
相关资源
最近更新 更多