Я пытаюсь использовать Perl для подстановки регулярных выражений с оценкой, чтобы помочь сделать некоторые файлы конфигурации более динамичными во время переноса Clearcase -> Git.Система Clearcase сильно зависит от каталога / vob /, но нам нужно сделать это более динамичным, чтобы наши сборки Jenkins были довольны.Я пытаюсь уменьшить вероятность того, что я нарушу сборки Clearcase во время миграции.
У меня есть файл конфигурации, который представляет собой текстовый файл с путем в каждой строке:
/vob/config/file1
/vob/config/file2
/vob/config/file3
Эта конфигурация выполняет некоторые дополнительные действия с этими файлами конфигурации.Управление этими «вещами» управляется скриптом Perl.Я хотел бы иметь несколько переменных среды ("VOB_FOO"), которые я могу переопределить при запуске сценария.
Я полный новичок в Perl, поэтому я решил использовать переменную среды PerlСинтаксис, сделайте регулярное выражение для него и оцените результаты подстановки в строке, пока я обрабатываю файл.
Я хочу, чтобы в моем новом файле конфигурации были явные записи $ ENV {'VOB_FOO'} в файле,таким образом, файл станет:
$ENV{'VOB_FOO'}/config/file1 -> /home/me/foo/config/file1
$ENV{'VOB_FOO'}/config/file2 -> /home/me/foo/config/file2
$ENV{'VOB_FOO'}/config/file3 -> /home/me/foo/config/file3
И полученная подстановка регулярного выражения + оценка превратится в (если VOB_FOO = / home / me / foo):
$ENV{'VOB_FOO'}/config/file1 -> /home/me/foo/config/file1
$ENV{'VOB_FOO'}/config/file2 -> /home/me/foo/config/file2
$ENV{'VOB_FOO'}/config/file3 -> /home/me/foo/config/file3
Мое регулярное выражениесоответствует отлично, и кажется, что замена работает, но оценка части замены нет, и я мог бы использовать некоторую помощь здесь.Я получаю успешное совпадение, но подстановка звучит так:
$ENV{'VOB_FOO'}/config/file1 -> $ENV('VOB_FOO'}/config/file1
$ENV{'VOB_FOO'}/config/file2 -> $ENV('VOB_FOO'}/config/file2
$ENV{'VOB_FOO'}/config/file3 -> $ENV('VOB_FOO'}/config/file3
Есть ли какие-либо предостережения относительно этой оценки или каким-то образом я могу сделать эту работу правильно?Вот мой код:
## See if we need to substitute an environment variable (e.g., is there a $ENV{} anywhere?)
## s - substitute through regular expressions (s/foo/bar/e)
## e modifier evaluates replacement as perl statement
{
use re 'debugcolor';
# this is for debugging only - I want to substitute
# grab the $ENV('VOB') string from the file and substitute
# I may have multiple environment variables that I have to
# contend with.
my $vob = $ENV{'VOB'};
print $vob;
print "\n";
my $regexp = qr/(\$ENV\{[\'][\w]*[\']\})/;
if( $second =~ m/$regexp/ )
{
print "Found the regexp; attempting substitution.\n";
$second =~ s/$regexp/$1/e;
}
else
{
print $regexp + "\n";
print $second + "\n";
print "Did not find the regexp\n";
}
}
Я также открыт для критики или предложений относительно лучшего способа сделать это - я не привязан к этому подходу или коду, пока я работаю над тем, чтобы это произошло.