You don't need a
while-loop. You should use a for-loop.
And the test if any element is in the array should be
unless(@array){...}.
You have to use the modifier
g to delete "all" things from '#' to the end of line...
#!/usr/bin/perl
use strict;
use warnings;
{
local $/;
open DATA, '<',"san.txt" or die $!;
my @blocks = map { [ split /\n/ ] }
( split /(?=ITEM NO:)/, ( map { s/#.*?\n//sg; $_ } <DATA> )[0]
+);
close DATA;
for(@blocks){
my @array = @$_;
unless(@array){
print "There is no item remaining in the file";
last;
}
print "@array\n";
}
}