Perl で半角全角が混じった文字列を指定した文字数で切り取るメモです。
早い話、PHP の mb_substr 関数ライクなものを Perl でやってみようと思います。
調べるといくつか方法があるみたいですが、自分的にしっくりきたのは Perl の substr 関数を使う方法です。ただ、そのままでは上手く切り取れないので文字列は一度、内部コードにエンコードする必要があります。
何はともあれソースコードはこんな感じになります。
#!/usr/bin/perl
## file: mb_substr.pl
use strict;
use warnings;
use Encode;
my $enc = find_encoding 'utf8';
## EUC-JP の場合
# my $enc = find_encoding 'euc-jp';
my $crop = $ARGV[0] || exit;
my $str = 'あいうえおabcdeアイウエオ一二三四五';
$str = $enc->decode($str);
$str = substr($str, 0, $crop);
$str = $enc->encode($str);
print "$str\n";
exit;
こんな感じに動作します。
$ perl mb_substr.pl 5 あいうえお $ perl mb_substr.pl 18 あいうえおabcdeアイウエオ一二三
半角全角混じりでも上手く切り取れました。
以上、Perl の小ネタでした。