我试图拆分字符串并重新排列结果,所有这些都在一个声明中:
my $date_str = '15/5/2015';
my @directly_assigned_date_array[2,1,0] = split ('/', $date_str);
这导致:
syntax error at Array_slice_test.pl line 16, near "@directly_assigned_date_array["
为什么会出错?
以下情况很好:
my @date_array;
@date_array[2,1,0] = split ('/', $date_str);
@ vol7ron提供了一种不同的方式:
my @rvalue_array = (split '/', $date_str)[2,1,0];
它确实起到了作用,但至少对我来说看起来不直观。
答案 0 :(得分:3)
由于您只是反转分割数组,您可以使用以下单个语句完成相同的操作:@date_array = reverse(split('/',$date_str));
答案 1 :(得分:3)
其他人在这里了解更多关于Perl内部的知识,但我认为它无法执行操作,因为数组切片引用的数组元素尚不存在。由于数组尚未声明,因此无法知道要引用的地址。
my @array = ( split '/', $date_str )[2,1,0];
这是有效的,因为split返回列表上下文中的值。列表和数组在Perl中非常相似。您可以将数组视为超级列表,具有额外的功能。无论您如何选择它,您都可以像数组切片一样执行列表slice。
在上面的代码中,您将获取列表,然后使用切片重新排序,然后将其分配给数组。一开始可能会有不同的想法,但它不应该太难。通常,您希望在赋值的rhs上执行数据操作(修改和排序),并将lhs作为接收端。
请记住,我还删除了一些括号,并使用Perl的智能操作解释顺序来减少语法。相同的代码可能看起来像以下(相同的操作,只是更多的绒毛):
my @array = ( split( '/', $date_str ) )[2,1,0];
如@luminos所述,由于您只有3个元素,您可以手动将其反转,您可以使用反向功能;我们可以再次利用Perl的魔术操作顺序,并在此处删除括号:
my @array = reverse split '/', $date_str;
但是在这种情况下它可能太神奇了,所以根据你的编码实践指南,你可能想要包括一组括号用于拆分或反向,如果它增加了可读性和理解力。