0

私は正規表現の概念にかなり慣れていません。bash スクリプトで使用する基本的な正規表現を理解しています。次のコード スニペットは、サーバー上の Wordpress プラグインを自動的に更新するために私が書いているプログラムからのものです。

とにかく、このコードの一部は、ディレクトリ内の .php ファイルを再帰的に処理するサブルーチンの一部であり、"Version:"、"version:"、"*Version:" などで始まるファイルのパターン マッチを試みます。ファイルを検索し、パターンが一致した場合、別のサブルーチンが文字「:」に続く値を抽出して正しいバージョン番号を取得しようとします。

$searchpath=$path."/".$plugins[$i];
        @files = <$searchpath/*.php>;
        print "Search path is ".$searchpath."\n";
OUT:    foreach $file (@files) 
        {
            print "Checking alternate php file: ".$file."\n";
            open(txt, $file);
            while($line = <txt>) 
            {
                for ($line)
                {
                 s/^\s+//;
                 s/\s+$//;
                }
                if ( $line =~ /^Version:|^version:|^\* Version:|\sVersion:/ )
                {
                    print "Version found in file ".$file."\n";  
                    $varfound=1;    
                    close(txt);
                    $ver=&read_extract($file);
                    print $ver."\n";
                    $pluginversion[$i]=$ver;
                    print "Array Num ".$i." Stored plugin name:".$plugins[$i]." Version found ".$ver." Version stored ".$pluginversion[$i]."\n";
                    last OUT;
                }
            }
        }

問題は、ロジックにエラーがあるようで、ファイルが実際に " . phpversion() . "\n"; 格納されているバージョン " . phpversion() . 検索クエリの「\n」。私の知識が限られているため、何が問題なのかを理解するのは難しいと思います。アドバイスをお待ちしています。

参照されている他のサブは以下に含まれています。

sub read_extract
{
    my $pl_version="";
    open(txt, my $file=$_[0]);
    while($line = <txt>)
    {
        for ($line)
        {
         s/^\s+//;
         s/\s+$//;
        }           
        if ( $line =~ /^Version:|^version:|^\* Version:|\sVersion:/ )
        {
            $pl_version=&extract_version($line);
        }
    }
    close(txt);
    $pl_version;
}

sub extract_version
{
    my $line=$_[0];
    $string=substr($line,rindex($line, ":")+1);
    for ($string)
    {
     s/^\s+//;
     s/\s+$//;
    }
    $string;
}

サブルーチンが完全に必要な場合は、含めることができます。ただし、デバッグ行には次のように表示されます。

Processing xcloner-backup-and-restore...Search path is /var/www/virtual/joel.co.in/vettathu.com/htdocs/wp-content/plugins/xcloner-backup-and-restore
Checking alternate php file: /var/www/virtual/joel.co.in/vettathu.com/htdocs/wp-content/plugins/xcloner-backup-and-restore/admin.cloner.html.php
Checking alternate php file: /var/www/virtual/joel.co.in/vettathu.com/htdocs/wp-content/plugins/xcloner-backup-and-restore/admin.cloner.php
Checking alternate php file: /var/www/virtual/joel.co.in/vettathu.com/htdocs/wp-content/plugins/xcloner-backup-and-restore/admin.xcloner-backupandrestore.php
Checking alternate php file: /var/www/virtual/joel.co.in/vettathu.com/htdocs/wp-content/plugins/xcloner-backup-and-restore/admin.xcloner.php
Checking alternate php file: /var/www/virtual/joel.co.in/vettathu.com/htdocs/wp-content/plugins/xcloner-backup-and-restore/cloner.config.php
Checking alternate php file: /var/www/virtual/joel.co.in/vettathu.com/htdocs/wp-content/plugins/xcloner-backup-and-restore/cloner.cron.php
Checking alternate php file: /var/www/virtual/joel.co.in/vettathu.com/htdocs/wp-content/plugins/xcloner-backup-and-restore/cloner.functions.php
Version found in file /var/www/virtual/joel.co.in/vettathu.com/htdocs/wp-content/plugins/xcloner-backup-and-restore/cloner.functions.php
" . phpversion() . "\n";
Array Num 26 Stored plugin name:xcloner-backup-and-restore Version found " . phpversion() . "\n"; Version stored " . phpversion() . "\n";

エラーがある場所のようです。

4

1 に答える 1