Perl:将 .* 替换为 §

Perl: substitute .* to §

我必须用 Perl (v5.24.1@Win10) 中的 $fn = '1./(4.*z.^2-1)' 等表达式替换多个子字符串:

$fn =~ s/.\//_/g;
$fn =~ s/.\*/§/g;
$fn =~ s/.\^/^/g;

但 § 不起作用;我在表达式结果 (1_(4┬ºz^2-1)) 中得到一个┬º。我需要这个用于文件夹和文件名,它在 Matlab@Win10 中使用 fn = strrep(fn, '.*', '§') 运行良好。

如何得到Perl替换结果中的§?

对我有用:

#! /usr/bin/perl
use warnings;
use strict;
use feature qw{ say };

use utf8;
use open IO => ':encoding(UTF-8)', ':std';

my $fn = '1./(4.*z.^2-1)';

s/.\//_/g,
s/.\*/§/g,
s/.\^/^/g
    for $fn;

say $fn;

输出:

1_(4§z^2-1)

你可以看到use utf8,它告诉Perl 源代码是UTF-8。确保将源文件保存为 UTF-8,然后。

use open设置标准输入和输出的UTF-8编码。确保您打印的终端也配置为使用 UTF-8。