Что эквивалентно экспорту bash в Perl? - PullRequest
4 голосов
/ 06 сентября 2011

Я конвертирую bash-скрипт в Perl. Я не уверен, что эквивалент export.

LOC=/tmp/1/
export LOC

Например, для двух приведенных выше строк, какой будет эквивалентный код Perl?

my $LOC = '/tmp/1/';
# what should go here?

Ответы [ 3 ]

8 голосов
/ 06 сентября 2011
$ENV{LOC} = "/tmp/1";

Содержимое %ENV распространяется в среду дочерних процессов сценария Perl.

4 голосов
/ 06 сентября 2011

Модуль Env (см. http://perldoc.perl.org/Env.html)

0 голосов
/ 06 сентября 2011

Внутри bash вы можете захотеть сделать что-то вроде этого:

EXPORT_CMD=/tmp/${0}_exports.bsh
perl ...
chmod +x $EXPORT_CMD
$EXPORT_CMD
rm $EXPORT_CMD

Внутри Perl, это:

sub export (@) {
    state $exh;
    unless ( $exh ) {
        my $export_cmd_path = $ENV{EXPORT_CMD};
        open( $exh, '>>', $export_cmd_path )
            or die "Could not open $export_cmd_path!"
            ;
    }
    while ( @_ > 1 ) { 
        my ( $name, $value ) = (( uc shift ), shift );
        # If you want it visible in the current script:
        {   no strict 'refs';
            ${"::$name"} = $value;
        }
        $exh->print( qq{export $name "$value"\n} );
    }
}

И потом, это просто вопрос кодирования этого:

export LOC => '/tmp/1/';

Проблема в том, что большинство программ не могут изменять переменные оболочки, из которых они были вызваны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...