У меня есть Perl-скрипт, который выполняет работу по расширению переменных среды Unix.Скрипт работает нормально.Сценарий выглядит следующим образом:
# I know this should not be typed here. This is here just for testing.
@ENV{qw(LKUP_DIR DATA_DIR CTRL_DIR MMM)} = qw(/appl1/TSS/lkup /appl1/TSS/data /appl1/TSS/ctrl Oct);
while ( <DATA> )
{
my $line=$_;
chomp $line;
$line =~ s{\$(\w+)}{ exists $ENV{$1} ? $ENV{$1} : '$'.$1 }ge;
$line =~ s{\$\{(\w+)\}}{ exists $ENV{$1} ? $ENV{$1} : '${'.$1.'}' }ge;
print "$line\n";
}
__DATA__
${LKUP_DIR}/lookup_file.txt
${CTRL_DIR}/ctrl_file_$MMMM.txt
$CTRL_DIR/ctrl_file_$MMM.txt
Я хочу преобразовать этот сценарий в однострочник, но я не уверен, как обрабатывать одинарные кавычки вокруг $ в регулярном выражении, используемом в сценарии, упомянутом выше.,Я попробовал ниже, но, конечно, это не работает:
perl -lne '$line=$_; $line =~ s{\$(\w+)}{ exists $ENV{$1} ? $ENV{$1} : '$'.$1 }ge; $line =~ s{\$\{(\w+)\}}{ exists $ENV{$1} ? $ENV{$1} : '${'.$1.'}' }ge; print "$line";' DATA.txt
Есть предложения?(Я хочу сделать это только в Perl.)