Perl脚本拆分[已关闭]

hiz5n14c  于 2022-12-13  发布在  Perl
关注(0)|答案(1)|浏览(121)

**已关闭。**此问题为not reproducible or was caused by typos。目前不接受答案。

这个问题是由一个打字错误或一个无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
3天前关闭。
Improve this question
我不太擅长Perl脚本编写,很难理解第一个split在下面的Perl脚本片段中是如何使用的。
在这一行:

@splitEachJudge = split / \(/ig,$orig_content;

它似乎不遵循syntax
任何善良的灵魂都能解释这里的分裂是如何运作的吗?

$glb_doc2Cont = "<AJudge>Andrew and Alvin</AJudge>";
$line = "<AJudge>Andrew and Alvin</AJudge>";

if ($line =~ /<AJudge>(.*?)<\/AJudge>/ig) {
        $orig_content = $1;
        $content = $1;

        @splitEachJudge = split / \(/ig,$orig_content;
        print("Last index of array= $#splitEachJudge\n");
        print("EachJudge1: $splitEachJudge[0]\n");
        print("EachJudge2: $splitEachJudge[1]\n");

        do {
                local @ARGV = ($splitEachJudge[1]);
                eval { require 'Cleanup.pl'};
                $judge2 = cleanLeadingTrailingSpace();
                print("Judge2: $judge2\n");     
            };

        if ($#splitEachJudge eq "1") {
            if ($splitEachJudge[0] =~ / and /i) {
                @eachJudgeAnd = split / and /ig,$splitEachJudge[0];
                    do {
                        local @ARGV = ($eachJudgeAnd[0]);
                        eval { require 'Cleanup.pl'};
                        $eachJudgeAnd[0] = cleanLeadingTrailingSpace();
                        local @ARGV = ($eachJudgeAnd[1]);
                        $eachJudgeAnd[1] = cleanLeadingTrailingSpace();
                    };
                if ($eachJudgeAnd[0] =~ /, /i) {
                    $StoreCommaJudge = "";
                        @eachJudgeComma = split /, /ig,$eachJudgeAnd[0];
                        for ($count=0;$count<=$#eachJudgeComma;++$count) {
                            $StoreCommaJudge .= "<Judge>$eachJudgeComma[$count]<\/Judge>, ";
                        }
                        $glb_doc2Cont=~s/<AJudge>\Q$content\E<\/AJudge>/<JCoram>$StoreCommaJudge and <Judge>$eachJudgeAnd[1]<\/Judge> \($judge2<\/JCoram>/ig;
                }else{
                    $glb_doc2Cont=~s/<AJudge>\Q$content\E<\/AJudge>/<JCoram><Judge>$eachJudgeAnd[0]<\/Judge> and <Judge>$eachJudgeAnd[1]<\/Judge> \($judge2<\/JCoram>/ig;
                }
            }
            else{
                $glb_doc2Cont=~s/<AJudge>\Q$content\E<\/AJudge>/<JCoram><Judge>$splitEachJudge[0]<\/Judge> \($judge2<\/JCoram>/ig;
            }
        }
        elsif ($#splitEachJudge eq "0"){
            @splitEachJudge2 = split /:/ig,$orig_content;
            $glb_doc2Cont=~s/<AJudge>\Q$content\E<\/AJudge>/<JCoram><Judge>$splitEachJudge2[0]<\/Judge>:<\/JCoram>/ig;
        }
    }
k10s72fa

k10s72fa1#

您已

split / \(/ig, $orig_content;

g没有意义,但它被忽略了。
匹配运算符(/ \(/ig)不进行计算,而是作为模式传递给split

split qr/ \(/i, $orig_content;

qr/ \(/i返回一个编译过的正则表达式模式。该模式匹配一个空格后跟一个左括号。(i使匹配不区分大小写,这在这里是无用的。)
因此,split$orig_content中搜索空格后接左括号的字符串。它返回由该模式分隔的字符串。
例如,

split / \(/, "aaa (bbb (ccc"

返回三个字符串:一米七纳一x一米八纳一x一米九纳一x。

相关问题