- ref EXPR
- ref
-
Examines the value of EXPR, expecting it to be a reference, and returns a string giving information about the reference and the type of referent. If EXPR is not specified,
$_
will be used.Examines the value of リファレンスと想定される EXPR の値を調べて、 そのリファレンスとリファレンス先の型に関する情報を表す 文字列を返します。 EXPR が指定されていない場合、
$_
が使われます。If the operand is not a reference, then the empty string will be returned. An empty string will only be returned in this situation.
ref
is often useful to just test whether a value is a reference, which can be done by comparing the result to the empty string. It is a common mistake to use the result ofref
directly as a truth value: this goes wrong because0
(which is false) can be returned for a reference.オペランドがリファレンスでない場合、空文字列が返されます。 空文字列はこの場合にのみ返されます。 結果を空文字列を比較することでできるので、
ref
は単にある値がリファレンスかどうかを調べるのにしばしば有用です。ref
の結果を直接真の値として使うのは良くある誤りです: リファレンスの場合に (偽である)0
が返されることがあるので、 これは誤りです。If the operand is a reference to a blessed object, then the name of the class into which the referent is blessed will be returned.
ref
doesn't care what the physical type of the referent is; blessing takes precedence over such concerns. Beware that exact comparison ofref
results against a class name doesn't perform a class membership test: a class's members also include objects blessed into subclasses, for whichref
will return the name of the subclass. Also beware that class names can clash with the built-in type names (described below).オペランドが bless されたオブジェクトへのリファレンスの場合、 リファレンス先が bless されているクラス名が返されます。
ref
はリファレンス先の物理的な種類については気にしません; bless されているかがそのような関心より優先されます。ref
の結果とクラス名の正確な比較は、クラスの所属のテストを 実行しないことに注意してください:ref
がサブクラスの名前を返す場合、 あるクラスのメンバはサブクラスに bless されているオブジェクトを 含んでいます。 クラス名は(後述する)組み込みの型名と衝突することにも注意してください。If the operand is a reference to an unblessed object, then the return value indicates the type of object. If the unblessed referent is not a scalar, then the return value will be one of the strings
ARRAY
,HASH
,CODE
,FORMAT
, orIO
, indicating only which kind of object it is. If the unblessed referent is a scalar, then the return value will be one of the stringsSCALAR
,VSTRING
,REF
,GLOB
,LVALUE
, orREGEXP
, depending on the kind of value the scalar currently has. But note thatqr//
scalars are created already blessed, soref qr/.../
will likely returnRegexp
. Beware that these built-in type names can also be used as class names, soref
returning one of these names doesn't unambiguously indicate that the referent is of the kind to which the name refers.オペランドが bless されていないオブジェクトへのリファレンスの場合、 返り値はオブジェクトの型を示します。 bless されていないリファレンス先がスカラではない場合、 返り値はオブジェクトの種類を示す、
ARRAY
,HASH
,CODE
,FORMAT
,IO
のいずれかの文字列です。 bless されていないリファレンス先がスカラの場合、 返り値はそのスカラが現在保持している種類に依存して、SCALAR
,VSTRING
,REF
,GLOB
,LVALUE
,REGEXP
の いずれかの文字列です。 しかし、qr//
は既に bless されて作成されるので、ref qr/.../
はおそらくRegexp
を返すことに注意してください。 これらの組み込み型名はまたクラス名として使われることができるので、ref
がこれらの名前の一つを返すことは、 明らかにリファレンス先がその名前が示している種類のものであることを 示しているわけではないことに注意してください。The ambiguity between built-in type names and class names significantly limits the utility of
ref
. For unambiguous information, useScalar::Util::blessed()
for information about blessing, andScalar::Util::reftype()
for information about physical types. Use theisa
method for class membership tests, though one must be sure of blessedness before attempting a method call. Alternatively, theisa
operator can test class membership without checking blessedness first.組み込み型とクラス名の間の曖昧さは
ref
の有用性を大きく制限しています。 曖昧でない情報のためには、bless に関する情報についてはScalar::Util::blessed()
を、 物理的な型の情報についてはScalar::Util::reftype()
を使ってください。 クラスの所属メンバテストには theisa
method を使ってください; 但し、メソッド呼び出しを試みる前に bless されていることを 確認しなければなりません。 あるいは、isa
operator は、 最初に bless されているかを確認することなくクラスメンバをテストできます。