Perl:替换。*到§

时间:2017-06-27 22:15:07

标签: perl string-substitution

我必须在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替换结果中获取§?

1 个答案:

答案 0 :(得分:2)

它对我有用:

#! /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。