是否有更短的方法来剪切此中文文本以使其适合$print_length
宽度的打印列?
#!/usr/bin/env perl
use warnings;
use 5.10.1;
use utf8;
binmode STDOUT, ':utf8';
use Unicode::GCString;
my $print_length = 15;
my $string1 = 'abcdefghijklmnopqrstuvwxyz';
say substr( $string1, 0, $print_length );
my $string2 = '大佛頂如來密因修證了義諸菩薩萬行首楞嚴經'; # don't know what that means
say fit_for_column( $string2 );
sub fit_for_column {
my ( $string ) = @_;
my $gcs = Unicode::GCString->new( $string );
my $pcw = $gcs->columns();
while ( $pcw > $print_length ) {
$string =~ s/\X\z//;
$gcs = Unicode::GCString->new( $string );
$pcw = $gcs->columns();
}
return $string;
}
答案 0 :(得分:1)
对于像这样的小文本,我认为你不能做太多其他事情。但是对于较长的文本,您可能需要查看East Asian Width,并使用它(可能压缩成代码点块而不是逐个)作为文本中字符宽度的参考。你可以有一个函数,它接受一个字符串并返回它的宽度(假设标准= 1,W = 2,H = 0.5等)。或者返回设定长度内的文本。