【问题标题】:Perl String comparisonPerl 字符串比较
【发布时间】:2015-03-14 03:27:21
【问题描述】:

我正在尝试将一个字符串与另一个进行比较。

如果它是一个包含东西的 JSON 结构,我想打印“包含东西”。 如果它是一个不包含东西的 JSON 结构,我打印“空” 如果它不在大括号“{}”之间,我会打印出错误。

这是我所做的:

if($content =~ m/{.+}/){
    print "Contains things \n";
} elsif($content eq "{}"){
    $job_status{$url}="";
    print "empty \n";
} else {
    print "Error \n";
}

当我将“{}”传递给变量$content时,他没有进入“elsif”,而是进入“else”,并抛出错误。 我尝试在 if 中放入“==”而不是“eq”,尽管我知道它是用于数字的。如果是这样,他输入“elsif”,并打印“empty”,就像他应该使用“eq”一样,然后抛出:

Argument "{}" isn't numeric in numeric eq (==)". 

我可以使用 JSON 库,但我不喜欢。

感谢您的帮助!

比迪

【问题讨论】:

  • 你有没有做过其他调试?尝试打印出 $content 变量:echo " '" . $content . "' ";

标签: string perl comparison


【解决方案1】:

它对我有用。 $content 有换行符吗?试试chomp $content;

use warnings;
use strict;

my $content = '{}';
if($content =~ m/{.+}/){
    print "Contains things \n";
} elsif($content eq "{}"){
    print "empty \n";
} else {
    print "Error \n";
}

__END__

empty 

【讨论】:

    【解决方案2】:

    如果我在 {} 之后添加换行符,我可以复制该行为:

    #!/usr/bin/perl
    use strict;
    use warnings;
    
    my $content = "{}\n";
    
    if($content =~ m/{.+}/){
        print "Contains things \n";
    } elsif($content eq "{}"){
        print "empty \n";
    } else {
        print "Error \n";
    }
    

    它返回“错误”,如果我将eq 替换为==,它会返回empty,因为"{}""{}\n" 在数字上都是0。如您所述,会引发警告。

    您可以在处理之前尝试chomp $content

    【讨论】:

    • 你的答案是正确的!我在“if”chomp($content); 之前用这条线大吃一惊,它解决了我的问题。 toolic先说了,所以我接受了他的回答,不过你的也可以。
    【解决方案3】:

    顶级 JSON 事物可以是对象 ({...}) 或数组 ([...]),但您只检查其中一个。如果您只想查看它是否为空,我会检查字符串的长度:

    chomp $possible_json;
    if( $length $possible_json >= 3 ) { ... }
    

    您还可以考虑 Randal Schwartz 的 regex for JSON parsing。它不能处理所有事情,但对于简单的事情通常就足够了。

    【讨论】:

      【解决方案4】:

      我可能最终会分手:

      unless ($content) {print "Error\n"};
      $content =~ /{(.*)}/
      my $resp = $1;
      if ($resp) {
       print "Contains Things ($resp)\n";
      } else {
       print "Empty\n";
      }
      

      【讨论】:

      • 这样就可以同时得到ErrorEmpty
      • 你说得对,我尽量不制作 2 个正则表达式,但在拥有内容的同时仍然得到所有内容。我只是没有想出一个干净的方法来实现这一点。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-23
      • 1970-01-01
      • 1970-01-01
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多