【问题标题】:How to compare alphanumeric values in Perl?如何比较 Perl 中的字母数字值?
【发布时间】:2011-12-23 09:00:51
【问题描述】:

这是我的代码-

print $cpu_arch."\n";  
if ($cpu_arch eq'AMD64') {      
    print "Remote machine is 64bit\n";
}

根据 CPU 架构,$cpu_arch 返回 x86 或 AMD64。 问题是无论 $cpu_arch 返回什么,if 循环条件都没有得到满足。我试过 chomp'ing $cpu_arch 但这似乎也无济于事。

【问题讨论】:

  • 你试过双引号,比如“AMD64”吗?另外,你确定你没有得到额外的空格吗?正则表达式比较可能更容易。

标签: string perl comparison alphanumeric


【解决方案1】:

字符串的运算符是eq,就像你一样。您的问题不在于您的运营商,而在于数据。您很可能缓冲不当(更改 $| 变量)或您的 $cpu_arch 有尾随空格。或者,也许您正在寻找正则表达式匹配而不是文字匹配(那么您想要 /AMD64/

【讨论】:

  • 谢谢!正则表达式工作得很好。正如你提到的,缓冲可能有问题。
  • 正则表达式的工作表明这不是缓冲问题,而是尾随空格问题。
  • 当你说“缓冲不当”时,你到底在说什么?
  • 这可能是错误的措辞。我的意思是 STDOUT 没有刷新,所以看起来好像什么都没有打印,而实际上它是,但你的终端没有显示它。
【解决方案2】:

您的代码是正确的。 $cpu_arch 不包含 AMD64,或者您误认为 if 条件为假(可能是因为缓冲)。

以下内容可能会帮助您检查$cpu_arch

use Data::Dumper;

{
   local $Data::Dumper::Useqq = 1;
   print(Dumper($cpu_arch));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    相关资源
    最近更新 更多