-1

これはシェルスクリプトです。Perlで同じことを行うにはどうすればよいですか?

prfile=~/sqllib/db2profile

profile()
{
if [ -f $prfile ] && [ "$prfile" != "" ];
then
        . $prfile
else
        read -p "Enter a valid Profile : " prfile
        profile
fi
}
profile

ここでは、プロファイルファイルをチェックし、見つかった場合はそれを実行し. $prfileます。それ以外の場合は、ユーザーに適切なプロファイルファイルを再度要求します。

アップデート

#!/usr/bin/perl
use strict;
use warnings;

my $profile = "$ENV{'HOME'}/sqllib/db2proile";
# default profile

while (not -e $profile) { # until we find an existing file
  print "Enter a valid profile: ";
  chomp($profile = <>); # read a new profile
}

qx(. $profile);

これはうまくいきました。ホームディレクトリはマシンごとに異なるため、ハードコーディングするのではなく動的にする必要があります。私は、シェルで達成したことをPerlで達成しようとしています。

4

1 に答える 1

0

私があなたの目的を理解していれば、perl を使用してこれを達成することはできないと思います。なぜなら、perl は子プロセスとして実行され、シェル (親プロセス) の環境を変更できないからです。多分これはあなたのために働くでしょうか?

prfile=~/sqllib/db2profile
if [ -s "$prfile" ] ; then
   . "$prfile"
else
  while true ; do 
    read -p "Enter a valid Profile : " prfile
    if [ -s "$prfile" ] ; then
       . "$prfile"
       break;
    fi
  done
fi
于 2013-02-24T17:46:16.103 に答える