読者です 読者をやめる 読者になる 読者になる

Perl日記

PerlとかRubyとかPHPとかPythonとか

undefが入ったときの組み込み関数挙動まとめ1

int()にundefを入れたら0が返ってきたので、他のundef入れても動きそうな関数にundef入れてみた。
一応、テンプレートとして、

#!/usr/bin/perl
use strict;
use warnings;
 
my $p = &function(undef);
print "$p\n";

にて実験。
選んだ関数は独断と偏見。

Numeric functions

int(undef)
Use of uninitialized value in int at int.pl line 5.
0
abs(undef)
Use of uninitialized value in abs at abs.pl line 5.
0
rand(undef)
Use of uninitialized value in rand at rand.pl line 5.
0.41609424685976

お。てっきり「0」になるかと思ったけれど、意外にも「1」扱いなんだ。
と思ったらrand(0)とrand(1)って同じなのか。
知らなかった。
perldoc -f rand

sqrt(undef)
Use of uninitialized value in sqrt at sqrt.pl line 5.
0
hex(undef)
Use of uninitialized value in hex at hex.pl line 5.
0
oct(undef)
Use of uninitialized value in oct at oct.pl line 5.
0

Functions for SCALARs or strings

chr(undef)
Use of uninitialized value in chr at chr.pl line 5.
 
crypt(undef, undef)
Use of uninitialized value in crypt at crypt.pl line 5.
Use of uninitialized value in crypt at crypt.pl line 5.
 
ord(undef)
Use of uninitialized value in ord at ord.pl line 5.
0
qq(undef)
undef

そうか。qq って変数しか展開されないのか。

length(undef)
Use of uninitialized value in length at lengh.pl line 5.
0
uc(undef)
 

uc(undef)は警告出ない。lc(undef)も出なかった。

ucfirst(undef)
 

ucfirst(undef)もlcfirst(undef)も警告出ない。

substr(undef, 0, 0)
Use of uninitialized value in substr at substr.pl line 5.
 


まあだいたい思った通りの結果。
逆にそうじゃないと困るか。