2013-05-03 170 views
2

有没有办法从数组中删除最后一个字符?如何从数组中删除最后一个字符?

为了清楚起见,我并不是要求数组中的每个条目都删除其最后一个字符,只有数组的最后一个条目应该删除其最后一个字符。

我曾看过chop/chomp/push/pop等,但很多都与从字符串中删除值有关。

任何帮助将是巨大的

感谢

+1

为什么你不只是砍你的数组中的最后一个值:现在,你可以只是你的阵列的最后一个条目使用chop?如果你发现了印章,我不会看到你还有什么其他问题。 – Mat 2013-05-03 13:15:36

+0

chop似乎删除了数组中所有元素的最后一个字符,而不仅仅是最后一个字符: – user2320229 2013-05-03 13:17:08

+1

然后,只需将它送入最后一个字符,而不是整个数组。 – Mat 2013-05-03 13:17:46

回答

9

chop是正确的工具,但它需要则params的列表。如果你传递一个数组,所有的元素将被切碎。相反,只需使用索引-1。这总是给你最后的元素。

my @foo = qw(foo bar baz); 
chop $foo[-1]; 
print Dumper \@foo; 

# ['foo', 'bar', 'ba'] 

doc

如果你砍的列表,每个元素都被砍伤。只返回最后一张的值。

+2

如果数组可以为空,'chop $ foo [-1] if @foo;' – ikegami 2013-05-03 16:25:42

2

poppush命令添加或删除阵列上的最后一个条目。这些(以及他们的合作伙伴unshiftshift)不会对单个字符起作用。

chomp命令仅删除\n。它是在Perl 4.0中添加的,用于替换chop命令,作为从文件中读取一行时删除\n字符的标准方法。这是因为如果最后一个字符不是\nchomp不会删除任何字符。这意味着即使您不确定最终是否有\n,也可以安全地使用字符串chomp

chop命令完全符合你的要求。无论该字符是什么,它都会删除最后一个字符。在Perl的早期版本中,你应该检查一下chop返回的内容以确保它是一个\n字符。这是你想要的。

您遇到的问题是chompchop不仅会在标量上下文上操作,还会在数组和哈希上下文上操作。在散列和数组上下文中,它们执行所有标量数据(但不是哈希中的键)。毕竟,如果我在整个文件中读取,这是相当多我想要的东西:

my @file_data = <$file_fh>; #Reads in the entire file into an array 
chomp @file_data;   #Removes all `\n` in one fell swoop 

所以,当你这样做:

chop @my_array; 

它是做什么的Perl认为你想,而不是他你实际上想要 - 只从数组中最后一个条目中删除最后一个字符。

你想要做的只是指定该数组中的最后一个条目,只是chomp。有两种方法可以做到这一点:

$my_array[ $#my_array ]; 
$my_array[ -1 ]; 

第一个使用这一事实$#my_array等于阵列中的最后一个条目的索引。第二个采用Perl快捷方式,其中负项反映阵列的末尾:

$my_array[-1]; #Last entry of the array 
$my_array[-2]; #Second to the last entry 

您将在Perl脚本中看到两种方式。

chop $my_array[-1]; 
chop $my_array[ $#my_array ]; 
相关问题