Проблема не имеет ничего общего с галстуком, но с splice
.
Ваша проблема в том, как вы используете splice
:
Вам нужно иметь ДЛИНУ 0, а не 1
, потому что теперь вы удаляете 1 элемент массива с индексом $i
перед добавлением вашей записи .
В вашем случае, скорее всего, все ваши тесты предназначались для добавления чего-либо в качестве второго последнего, поэтому вы удалили последний элемент и, как таковой, ваш элемент прошел до конца.
Попробуйте:
splice @array, $i, 0, $rec;
Вот мой тест:
$ cat ala.txt
#comment1
#comment2
#comment3
#START HERE
a: a@email.com
b: b@email.com
$ grep 'my $rec' junk/s2.pl
my $rec = 'p: p@email.com';
$ perl5.8 junk/s2.pl
$ cat ala.txt
#comment1
#comment2
#comment3
#START HERE
a: a@email.com
b: b@email.com
p: p@email.com
$ grep 'my $rec' junk/s2.pl
my $rec = 'a: ab@email.com # if i add another record of a';
$ perl5.8 junk/s2.pl
$ cat ala.txt
#comment1
#comment2
#comment3
#START HERE
a: ab@email.com # if i add another record of a
a: a@email.com
b: b@email.com
p: p@email.com
СТАРЫЙ ТЕСТ
Я скопировалвесь ваш код, добавил my $length = $ARGV[0] || 0;
в начале и изменил splice
строку на splice @array, $i, $length, $rec;
# Offset 1
$ cp ala_orig.txt ala.txt ; echo "BEFORE: #############" ; cat ala.txt ;
perl5.8 junk/s2.pl 1 ; echo "AFTER #############" ; cat ala.txt
BEFORE: #############
#aaa
#START HERE
b: x
c:y
u:a
z:y
AFTER #############
#aaa
#START HERE
b: x
c:y
p: p@email.com
z:y
# Offset 0
$ cp ala_orig.txt ala.txt ; echo "BEFORE: #############" ; cat ala.txt ;
perl5.8 junk/s2.pl 0 ; echo "AFTER #############" ; cat ala.txt
BEFORE: #############
#aaa
#START HERE
b: x
c:y
u:a
z:y
AFTER #############
#aaa
#START HERE
b: x
c:y
p: p@email.com
u:a
z:y