文字列を同等の数値に変換したり、その逆、つまり同等の数値から文字列を取得したりするための組み込み関数 (単一文字の ord など) はありますか。
5 に答える
nickisfatからのアプローチsplit
とは別に、次のものもあります。unpack
use Encode qw(encode);
my $characters = 'This is my string.';
my $octets = encode 'UTF-8', $characters;
unpack 'C*', $octets
# expression returns qw(84 104 105 115 32 105 115 32 109 121 32 115 116 114 105 110 103 46)
unpack 'H*', $octets
# expression returns '54686973206973206d7920737472696e672e'
通常、数値と文字列の値を変換する必要はありません。新しいコンテキストで使用すると、すべてのスカラーが自動的に更新されるためです。したがって、数値をスカラーに割り当て、後でそれを文字列コンテキストで使用すると、Perl は自動的に文字列表現を生成します。
ただし、一部のライブラリは、スカラーの検査に依存して、数値または文字列として処理する方法を決定します (こんにちは、JSON:XS!)。数値または文字列値を手動でスカラーに再割り当てする以外に、それを解決する明確な方法はありません。 「自動生成」部分を拭きます。そのような場合、変数$var += 0
を数値化または文字列化するなどの単純で高速な計算を使用します。$var = "$var"
組み込み関数を文字列内の各文字に順番に適用するだけです。以下はおそらくもっときれいにすることができますが、うまくいきます:
#!/usr/bin/perl
use strict ;
use warnings ;
my $string = 'some text' ;
my $num = '115,111,109,101,32,116,101,120,116' ;
strToNum($string) ;
numToStr($num) ;
sub strToNum{
my $input = shift ;
local $" = ',' ;
my @result = map( ord, split(//, $input) ) ;
print "@result\n" ;
}
sub numToStr{
my $input = shift ;
local $" = '' ;
my @result = map( chr, split(/,/, $input) ) ;
print "@result\n" ;
}
ord は、Perl で必要なことも実行します。
perl -e '$char = "y"; print ord($char);'
関数が perl の一部であるかどうかを確認するためにいつでも perldoc を使用できます。perldoc -f ord
Perl は動的に型付けされます。したがって、コンテキストに応じて、変数は文字列または数値として扱われます。明示的に変換する必要はありません。