Arrays 获得;split的第二个参数是字符串,而不是数组";在处理输入数据时

Arrays 获得;split的第二个参数是字符串,而不是数组";在处理输入数据时,arrays,string,perl,variables,split,Arrays,String,Perl,Variables,Split,我是新来的(第一篇帖子!),已经搜索了一个类似的问题好几天了,但我一生都找不到足够相似的东西来帮助我(或者如果有,我就认不出来)。如果我发错了这个问题,请告诉我正确的位置:) :: 所以我刚刚开始使用Perl,我需要一些输入: xxx00_xxxx_xxx00并将字符串拆分为由“x00”分隔的位。这是我使用数组完成的 问题是现在我想把数组中的值分配到变量中,这样我就可以使用它们了 以下是我的新手代码: #/usr/bin/perl 严格使用; 使用警告; #听取意见 打印“输入ID:\n”; 我

我是新来的(第一篇帖子!),已经搜索了一个类似的问题好几天了,但我一生都找不到足够相似的东西来帮助我(或者如果有,我就认不出来)。如果我发错了这个问题,请告诉我正确的位置:)

::

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

xxx00_xxxx_xxx00并将字符串拆分为由“x00”分隔的位。这是我使用数组完成的

问题是现在我想把数组中的值分配到变量中,这样我就可以使用它们了

以下是我的新手代码:

#/usr/bin/perl
严格使用;
使用警告;
#听取意见
打印“输入ID:\n”;
我的$input=;
#分割输入
my@values=split('.',$input);
打印“$values[0]\n”;
打印“$values[1]\n”;
打印“$values[2]\n”;
#将拆分组件分配给变量
我的$customer_ID=$values[0];
my$service_ID=$values[1];
my$ipac_ID=$values[2];
#打印组件
打印“客户ID:$Customer_ID”;
打印“服务ID:$Service_ID”;
打印“IPAC ID:$IPAC_ID”;
出口0;
顺便说一句,我知道我在第19行有错误(我也不知道…)

感谢您的帮助-谢谢

您可能更喜欢这样:

my ($customer_ID, $service_ID, $ipac_ID) = split('_', $input);

你是在用键盘输入吗

如果是,请尝试将
$input=
替换为
$input=


顺便问一下,您收到的错误是什么?

您可以像这样清理代码:

print "enter ID: ";
chomp(my $input = <STDIN>);

my ($customer_ID, $service_ID, $ipac_ID) = split(/_/, $input);

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

split的第二个参数是字符串,而不是数组,消息
来自您正在使用的Padre IDE,而不是Perl。它是由Padre的“初学者模式”生成的,该模式天真地检查文本
拆分
和下一个分号之间是否存在
@
,甚至跨多行,如果是这样,则假定您犯了错误。当然,这种方法不允许评论

你唯一的错误——如果你可以称之为错误的话——是

  • 您将换行保留在输入字符串的末尾,因此它看起来像
    “xxx00\u xxxx\u xxx00\n”
    拆分将产生
    “xxx00”、“xxxx”、“xxx00\n”
    。一个简单的
    chomp$input
    将删除该换行符

  • 您不会在每个标量值之后打印换行符,因此您的输出都在一行上,并且您的会话如下所示

    enter ID:
    xxx00_xxxx_xxx00
    xxx00
    xxxx
    xxx00
    Customer ID: xxx00Service ID: xxxxIPAC ID: xxx00
    
    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";
    
    您所需要做的就是在每个
    print
    上添加一个换行符(就像您以前对
    print
    语句所做的那样),如下所示

    enter ID:
    xxx00_xxxx_xxx00
    xxx00
    xxxx
    xxx00
    Customer ID: xxx00Service ID: xxxxIPAC ID: xxx00
    
    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";
    
一个更整洁的程序版本和更明显的选择会是这样的

enter ID:
xxx00_xxxx_xxx00
xxx00
xxxx
xxx00
Customer ID: xxx00Service ID: xxxxIPAC ID: xxx00
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";
#/usr/bin/perl
严格使用;
使用警告;
#听取意见
打印“输入ID:”;
我的$input=;
chomp$输入;
#分割输入
my@values=split/u/,$input;
为@values打印“$\un”;
#将拆分组件分配给变量
我的($customer\u ID、$service\u ID、$ipac\u ID)=@值;
#打印组件
打印“客户ID:$Customer\u ID\n”;
打印“服务ID:$Service\u ID\n”;
打印“IPAC ID:$IPAC\U ID\n”;

@mpapec如何将数组[0]中的分割数据存储到一个变量中,以供以后在程序中使用您已经将分割操作中的数据分配给变量--$customer\u ID、$service\u ID等@ialarmedalien是的,我认为它不起作用,但它确实起作用了!这里真的有问题吗?似乎您已经回答了。第19行出现了什么错误?第19行:split的第二个参数是字符串,而不是数组。我可以问chomp是做什么的,为什么在代码段中使用它?@Unixmonkey不正确--
chomp
从字符串的末尾剪切一个新行标记。它实际上被设置为删除
$/
(输入记录分隔符),默认情况下这是新行标记。如果您将
$/
设置为其他值,
chomp
将删除该值。Borodin将
split'
更改为
split/
,因为
split
的第一个参数应为正则表达式,因此您不妨将其设置为正则表达式。