Вопрос в том, почему вы делаете поиск и замену изнутри perl, через shell, внутри perl. Похоже на обходной путь, и вы столкнетесь с проблемами при интерполяции оболочки.
\Q ... \E
должен переопределять специальные символы в вашей строке, поэтому /
"не должно быть" проблемой. От perlre :
\Q quote (disable) pattern metacharacters till \E
Вот альтернативное (непроверенное) решение perl. Если вы хотите быть более уверенным, замените разделитель /
на что-то другое, например s###
(вы можете использовать любой символ в качестве разделителя).
use strict;
use warnings;
use File::Copy;
open my $fh, '<', $testSuiteFile or die $!;
open my $out, '>', $testSuiteFile . ".bak" or die $!;
while (<$fh>) {
s/\Q${localTestDir}\E//g;
print $out $_;
}
move($testSuiteFile . ".bak", $testSuiteFile) or die $!;
Или используйте Tie :: File
use strict;
use warnings;
use Tie::File;
tie, my @file, 'Tie::File', $testSuiteFile or die $!;
for (@file) {
s/\Q${localTestDir}\E//g;
}
untie @file;