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