Здесь много ошибок.Вы используете свои петли неправильно.Вы вызываете openFile
для всего массива, один раз для каждого элемента в массиве.Вероятно, правильная версия:
foreach (@file_names) {
openFile($_);
}
Ваш саб построен неправильно.В perl вы не должны ставить аргументы в скобках после имени.Это место для прототипов (с которыми вы не хотите возиться).Ваши аргументы хранятся в неявной переменной @_
.
sub openFile {
my @names = @_; # args are stored in @_
Но это также неправильно, если вы собираетесь открыть только один файл.
my $file = shift; # shift an argument from @_
Ваше открытое утверждение неверно,Когда вы помещаете массив в двойные кавычки, он интерполируется с пробелами между аргументами.Например,
@array = ("file.txt", "file2.txt");
print "@array"; # prints "file.txt file2.txt"
Вы не проверяете возвращаемое значение оператора open, что означает, что он может молча завершиться с ошибкой (что, вероятно, происходит в этом случае).Используйте:
open my $fh, "<", $file or die $!; # three arg open with lexical file handle
Возможно, вы не хотите возиться с двойным открытием чтения / записи.Здесь вы читаете до конца файла, затем добавляете данные в конец.Запишите данные во временный файл, а затем обменяйте их обратно.Или воспользуйтесь функцией редактирования на месте, но я бы не советовал вам это делать, поскольку вы не слишком опытны.Вы также можете seek
к началу файла, но я бы не стал этого делать, так как открыть файл так же просто.
Это утверждение также неверно.
@fileinput =~s/AUTO_INCREMENT=//d;
Это поместит ваш массив в скалярный контекст, который будет переводить вас, пытаясь выполнить подстановку числа.Также, насколько я знаю, модификатора /d
нет.
Просто удалите массив и используйте вместо него
s/AUTO_INCREMENT=//;
....Это будет эквивалентно $_ =~ s/...
.$_
- это переменная по умолчанию, которую использует perl, когда явная переменная не указана.
Но зачем себе тяжело?Просто используйте однострочник:
perl -i.bak -pwe 's/AUTO_INCREMENT=//g' eV12_No_Data.sql V12_No_Data.sql
Это сохранит резервную копию файлов с расширением «.bak» и будет циклически перебирать файлы с помощью переключателя -p
, выполняя подстановку несколько раз.раз в строке (из-за модификатора /g
удалите его, чтобы просто удалить первое вхождение).
При написании кода на Perl всегда очень важно помнить об использовании
use strict;
use warnings;
Какэто поможет вам обнаружить ошибки и сэкономит много времени на отладку опечаток и других подобных неприятностей.