我在文件中有输出。我有3块输出。文件中的数据是
*******Block A********
iSCSI_Storage=0
User=Admin
IP=15.178.209.111
*****end of block A******
*******Block B********
iSCSI_Storage=1
User=Admin_1
IP=15.178.209.111
*****end of block B******
*******Block C********
iSCSI_Storage=2
User=Admin_2
IP=15.178.209.111
*****end of block C******
我想删除代码的第一个块,我必须检查文件中是否存在其他块。此外,我必须确保块A的数据不应出现在文件中。我们的文件现在只有2个块。
同样在第一次操作后,我必须删除最后一个块并检查相同的条件,最后我必须删除剩余的块。
请告诉我有效的方法。
答案 0 :(得分:1)
如果我理解正确,您需要先验证是否可以删除第一个块,然后将其删除。假设子程序可用于此目的,您可能会使用以下内容:
use strict;
use warnings;
my @blocks;
my $block = "";
while (<DATA>) {
if (/^\Q*******\E/ .. /^\Q*****end of\E/) {
$block .= $_;
if (/^\Q*****end of\E/) {
push @blocks, $block;
$block = "";
}
}
}
my $data = shift @blocks;
print $data if verify_block($data);
print @blocks;
sub verify_block {
... # enter code here
}
__DATA__
*******Block A********
iSCSI_Storage=0
User=Admin
IP=15.178.209.111
*****end of block A******
*******Block B********
iSCSI_Storage=1
User=Admin_1
IP=15.178.209.111
*****end of block B******
*******Block C********
iSCSI_Storage=2
User=Admin_2
IP=15.178.209.111
*****end of block C******