在if语句中使用'local'关键字

aur*_*rya 3 perl cross-platform

我想使用这段代码:

if ($windows) {
    local $/ = "\r\n";
} else {
    local $/ = "\n";
}

# ... code reading a file line by line
Run Code Online (Sandbox Code Playgroud)

但它不起作用,因为本地将范围限制在括号内.我该怎么办 ?

这是正确的方法吗?

if ($windows) {
    $/ = "\r\n";
} else {
    $/ = "\n";
}

# ... code reading a file line by line
Run Code Online (Sandbox Code Playgroud)

我很害怕它可能会对其他程序产生一些副作用..

Axe*_*man 6

第一种方法是使用条件运算符:

{   local $/ = $windows ? "\r\n" : "\n";
    ...
}
Run Code Online (Sandbox Code Playgroud)

你能做到的另一种方式是:

{ # enclosing scope
    local $/ = "\n";
    if ( $windows ) { $/ = "\r\n"; }
    ...
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以local先将分配,然后分配:

{   local $/;
    if ( $windows ) { 
       $/ = "\r\n";
    }
    else { 
        $/ = "\n";
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • @Borodin,真的*真的没必要吗?假设`$ windows`仅表示*预期*平台,而不是当前. (4认同)