arrays - 处理输入数据时获取 "The second parameter of split is a string, not an array"

标签 arrays string perl variables split

我对此很陌生(第一篇文章!),并且已经搜索类似的问题很多天了,但我一生都找不到足够类似的东西来提供帮助(或者如果存在的话无法识别它) 。如果我错误地发布了这个问题,请引导我到正确的地方:)

::

所以我刚刚开始使用 Perl,我需要一些输入:

xxx00_xxxx_xxx00 并将字符串拆分为由“_”分隔的位。我已经使用数组完成了此操作。

现在的问题是我想将数组中的值分配给变量,以便我可以使用它们。

这是我的新手代码:

#!/usr/bin/perl

use strict;
use warnings;

# take input
print "enter ID:\n";
my $input = <>;

#split input
my @values = split( '_', $input );

print "$values[0]\n";
print "$values[1]\n";
print "$values[2]\n";

#assign split components to variables
my $customer_ID = $values[0];
my $service_ID  = $values[1];
my $ipac_ID     = $values[2];

#print components
print "Customer ID: $customer_ID";
print "Service ID: $service_ID";
print "IPAC ID: $ipac_ID";

exit 0;

顺便说一句,我知道第 19 行有错误(我也无法弄清楚......)

感谢任何帮助 - 谢谢!

最佳答案

消息The second argument of split is a string, not an array来自您正在使用的Padre IDE,而不是来自Perl。它是由 Padre 的“初学者模式”生成的,它天真地检查文本 split 和下一个分号之间是否有 @,甚至跨多行,如果有则它假定您犯了一个错误。当然,这种方法不允许评论。

您遇到的唯一错误 - 如果您可以称其为错误 - 是

  • 您将换行符保留在输入字符串的末尾,因此它看起来像 "xxx00_xxxx_xxx00\n" 并且 split 将生成 “xxx00”,“xxxx”,“xxx00\n”。一个简单的 chomp $input 将删除换行符

  • 您不会在每个标量值后打印换行符,因此您的输出全部在一行上,您的 session 如下所示

    enter ID:
    xxx00_xxxx_xxx00
    xxx00
    xxxx
    xxx00
    Customer ID: xxx00Service ID: xxxxIPAC ID: xxx00
    

    您需要做的就是在每个 print添加一个换行符(就像您对之前的 print 语句所做的那样),如下所示

    print "Customer ID: $customer_ID\n";
    print "Service ID: $service_ID\n";
    print "IPAC ID: $ipac_ID\n";
    

具有更明显选择的程序的更整洁版本将如下所示

#!/usr/bin/perl

use strict;
use warnings;

# take input
print 'Enter ID: ';
my $input = <>;
chomp $input;

# Split input
my @values = split /_/, $input;

print "$_\n" for @values;

# Assign split components to variables 
my ($customer_ID, $service_ID, $ipac_ID) = @values;

#print components 
print "Customer ID: $customer_ID\n";
print "Service ID:  $service_ID\n";
print "IPAC ID:     $ipac_ID\n";

关于arrays - 处理输入数据时获取 "The second parameter of split is a string, not an array",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26096078/

相关文章:

javascript - 能够查询数组中的特定索引吗? Mongoose

javascript 删除 json 包含字符串而不是 equals 的地方

string - 严格将字符串转换为 int

java - 如何在 Java 正则表达式中使用 "and"运算符

perl - MooseX::Declare 和 MooseX::Method::Signatures 生产准备好了吗?

javascript - 控制台一次仅打印一个字母,而不是完整的单词

java - 使用 Arrays.asList 方法通过 Stream 打印 int Array

string - 对数字字符串求和

perl - 在 Unix shell 脚本中匹配 2 个模式后追加一行

perl - Perl if block 中的 "-s"有什么作用?