佩尔 |打印 ASCII,但反斜杠其他
Perl | Print ASCII, but backslashed other
我想打印 95 个 ASCII 符号不变,但让其他人打印其代码。
如何在纯perl中制作它? 'unpack'函数?任何模块?
print BackSlashed('test folder'); # expected test0folder
print BackSlashed('test тестовая folder');
# expected test012051112060200170folder
print BackSlashed('НОВАЯ ПАПКА');
# expected 050602000700700070200
sub BackSlashed() {
my $str = shift;
.. backslashed code here...
return $str
}
您可以使用带评估替换部分的正则表达式替换。在那里,需要convert each character to its numeric value first, and then output it in octal notation. There's a good explanation for it in this answer。附上转义的反斜杠 \
以使其显示在输出中。
$str =~ s/([^a-zA-Z0-9])/sprintf "\%03o", ord()/eg;
我将捕获组限制为基本的 ASCII 字母和数字。如果你想要其他东西,只需更改字符组即可。
由于您的样本输出有八位位组,但您说您的代码有 use utf8
编译指示,因此您需要在 运行 替换之前将字符串的 Perl 表示转换为相应的八位位组序列。
use utf8;
my $str = 'НОВАЯ ПАПКА';
print foo($str);
sub foo { # note that there are no () here!
my $str = shift;
utf8::encode($str);
$str =~ s/([^a-zA-Z0-9])/sprintf "\%03o", ord()/eg;
return $str;
}
我想打印 95 个 ASCII 符号不变,但让其他人打印其代码。 如何在纯perl中制作它? 'unpack'函数?任何模块?
print BackSlashed('test folder'); # expected test0folder
print BackSlashed('test тестовая folder');
# expected test012051112060200170folder
print BackSlashed('НОВАЯ ПАПКА');
# expected 050602000700700070200
sub BackSlashed() {
my $str = shift;
.. backslashed code here...
return $str
}
您可以使用带评估替换部分的正则表达式替换。在那里,需要convert each character to its numeric value first, and then output it in octal notation. There's a good explanation for it in this answer。附上转义的反斜杠 \
以使其显示在输出中。
$str =~ s/([^a-zA-Z0-9])/sprintf "\%03o", ord()/eg;
我将捕获组限制为基本的 ASCII 字母和数字。如果你想要其他东西,只需更改字符组即可。
由于您的样本输出有八位位组,但您说您的代码有 use utf8
编译指示,因此您需要在 运行 替换之前将字符串的 Perl 表示转换为相应的八位位组序列。
use utf8;
my $str = 'НОВАЯ ПАПКА';
print foo($str);
sub foo { # note that there are no () here!
my $str = shift;
utf8::encode($str);
$str =~ s/([^a-zA-Z0-9])/sprintf "\%03o", ord()/eg;
return $str;
}