Scalar-Properties-0.11 > Scalar::Properties

名前

Scalar::Properties - 実行時におけるスカラー変数のプロパティ

概要

  use Scalar::Properties;
  my $val = 0->true;
    if ($val && $val == 0) {
    print "yup, its true alright...\n";
  }

  my @text = (
    'hello world'->greeting(1),
    'forget it',
    'hi there'->greeting(1),
  );
  print grep { $_->is_greeting } @text;

  my $l =  'hello world'->length;

説明

Scalar::Properties attempts to make Perl more object-oriented by taking an idea from Ruby: Everything you manipulate is an object, and the results of those manipulations are objects themselves.

Scalar::Propertiesは、Perlをよりオブジェクト指向なものにする。 これはRubyからとってきたアイディア:「あなたが操作するものは全て オブジェクト、そして操作の結果それ自身もオブジェクト」による。

  'hello world'->length
  (-1234)->abs
  "oh my god, it's full of properties"->index('g')

The first example asks a string to calculate its length. The second example asks a number to calculate its absolute value. And the third example asks a string to find the index of the letter 'g'.

最初の例は、ある文字列に対してそれ自身の長さを計算させる。二番目の例は、 ある数字に対してそれ自身の絶対値を計算させる。そして三番目の例は、ある 文字列に対し文字'g'のインデックスを探させる。

Using this module you can have run-time properties on initialized scalar variables and literal values. The word 'properties' is used in the Perl 6 sense: out-of-band data, little sticky notes that are attached to the value. While attributes (as in Perl 5's attribute pragma, and see the Attribute::* family of modules) are handled at compile-time, properties are handled at run-time.

このモジュールを使えば、初期化されるスカラー変数と文字列変数に対して 実行時のプロパティをもたらすことができる。ここで"プロパティ"(properties) とは、Perl 6での意味で使っている:つまり帯域外データ、その値に結び付けられた 小さなメモということである。属性(attributes)(Perl 5のattributeプラグマに よるものや、Attribute::*系統のモジュールを参照のこと)がコンパイル時に 処理されるのに対し、プロパティは実行時に処理される。

Internally properties are implemented by making their values into objects with overloaded operators. The actual properties are then simply hash entries.

内部では、変数の値をオーバーロードされた演算子を伴うオブジェクトに 入れることによって、プロパティは実装される。よって、実際のプロパティは 単純にハッシュのエントリである。

Most properties are simply notes you attach to the value, but some may have deeper meaning. For example, the true and false properties plays a role in boolean context, as the first example of the Synopsis shows.

ほとんどのプロパティは単にあなたがその値に結びつけた記しにすぎないが、 あるものはより深い意味を持つ。例えば、true及びfalseプロパティは ブールコンテキストにおいてある役割を演じる。ちょうど概要の最初の例で 示したように。

Properties can also be propagated between values. For details, see the EXPORTS section below. Here is an example why this might be desirable:

プロパティは変数間を伝播することもできる。詳細は下のエクスポートの セクションを見て欲しい。以下はそれが望ましいであろう場合の例だ:

  pass_on('approximate');
  my $pi = 3->approximate(1);
  my $circ = 2 * $rad * $pi;

  # 今や$circ->approximateは、その値が近似値から導かれたもので
  # あることを示す

Please don't use properties whose name start with an underscore; these are reserved for internal use.

プロパティにアンダーバーで始まる名前を使わないで頂きたい; それらは内部で利用するために予約されている。

You can set and query properties like this:

次のようにしてプロパティをセットしたり求めたりできる:

$var->myprop(1)

sets the property to a true value.

プロパティに真値をセットする。

$var->myprop(0)

sets the property to a false value. Note that this doesn't delete the property (to do so, use the del_props method described below).

プロパティに偽値をセットする。これはプロパティを削除しているのでは ないということに注意(削除するには、下で述べているdel_propsを使う こと)。

$var->is_myprop, $var->has_myprop

returns a true value if the property is set (i.e., defined and has a true value). The two alternate interfaces are provided to make querying attributes sound more natural. For example:

プロパティがセット(定義されかつ真値を持つ)されていれば真値を返す。 二つの代替可能なインターフェースが提供されているが、これにより、 より自然な表現で属性値を求めることができる。例えば:

  $foo->is_approximate;
  $bar->has_history;

メソッド

Values thus made into objects also expose various utility methods. All of those methods (unless noted otherwise) return the result as an overloaded value ready to take properties and method calls itself, and don't modify the original value.

オブジェクトに入れられた値はそれゆえ、様々なユーティリティメソッドを さらけ出す。これらのメソッドは(注記したもの以外)全て、プロパティを得る ためにオーバーロードされた値と、それ自身を呼び出すメソッドとして結果を 返し、元の値は変更しない。

内観メソッド

These methods help in managing a value's properties.

これらのメソッドはプロパティ管理を助ける。

$var-get_props>

Get a list of names of the value's properties.

その値が持つプロパティ名のリストを得る。

$var-del_props(LIST)>

Deletes one or more properties from the value. This is different than setting the property value to zero.

その値から一つ以上のプロパティを削除する。これはプロパティの値に ゼロをセットすることとは違う。

$var-del_all_props>

Deletes all of the value's properties.

その値が持つ全プロパティを削除する。

数値メソッド

plus(EXPR)

Returns the value that is the sum of the value whose method has been called and the argument value. This method also overloads addition, so:

メソッドを呼び出した値とその引数の値とを足し合わせた値を返す。 このメソッドはまた、足し算をオーバーロードする。よって:

  $a = 7 + 2;
  $a = 7->plus(2);    # 同じ
minus(EXPR)

Returns the value that is the the value whose method has been called minus the argument value. This method also overloads subtraction.

メソッドを呼び出した値からその引数の値を引いた値を返す。 このメソッドはまた、引き算をオーバーロードする。

times(EXPR)

Returns the value that is the the value whose method has been called times the argument value. This method also overloads multiplication.

メソッドを呼び出した値とその引数の値を掛け合わせた値を返す。 このメソッドはまた、掛け算をオーバーロードする。

divide(EXPR)

Returns the value that is the the value whose method has been called divided by the argument value. This method also overloads division.

メソッドを呼び出した値をその引数の値で割った値を返す。 このメソッドはまた、割り算をオーバーロードする。

modulo(EXPR)

Returns the value that is the the value whose method has been called modulo the argument value. This method also overloads the modulo operator.

メソッドを呼び出した値に対しその引数の値を法とする値を返す。 このメソッドはまた、mod演算子をオーバーロードする。

exp(EXPR)

Returns the value that is the the value whose method has been called powered by the argument value. This method also overloads the exponentiation operator.

メソッドを呼び出した値にその引数の値を乗じた値を返す。 このメソッドはまた、指数演算子をオーバーロードする。

abs

Returns the absolute of the value.

その値の絶対値を返す。

zero

Returns a boolean value indicating whether the value is equal to 0.

その値が0に等しいかどうかを示すブール値を返す。

文字列メソッド

length, size

Returns the result of the built-in length function applied to the value.

その値に組み込みのlength関数を適用した結果を返す。

reverse

Returns the reverse string of the value.

その値をreverseした文字列を返す。

uc, ucfirst, lc, lcfirst, hex, oct

Return the result of the appropriate built-in function applied to the value.

その値に対して適切な組み込み関数を適用した結果を返す。

concat(EXPR), append(EXPR)

Returns the result of the argument expression appended to the value.

その値に引数式を加えた結果を返す。

swapcase

Returns a version of the value with every character's case reversed, i.e. a lowercase character becomes uppercase and vice versa.

その値の大小文字が逆転したものを返す。つまり、小文字は大文字になり、 その逆も同様。

split /PATTERN/, LIMIT

Returns a list of overloaded values that is the result of splitting (according to the built-in split function) the value along the pattern, into a number of values up to the limit.

正規表現パターンに沿ってsplit(組み込みのsplitに基づく)された値 (オーバーロードされる)のリストを返す。splitされる数はLIMITを上限とする。

ブールメソッド

numcmp(EXPR)

Returns the (overloaded) value of the numerical three-way comparison. This method also overloads the <=> operator.

数値に対する3ウェイ比較の(オーバーロードされた)値を返す。 このメソッドはまた、<=>演算子をオーバーロードする。

cmp(EXPR)

Returns the (overloaded) value of the alphabetical three-way comparison. This method also overloads the cmp operator.

アルファベットに対する3ウェイ比較の(オーバーロードされた)値を返す。 このメソッドはまた、cmp演算子をオーバーロードする。

eq(EXPR), ne(EXPR), lt(EXPR), gt(EXPR), le(EXPR), ge(EXPR)

Return the (overlaoded) boolean value of the appropriate string comparison. These methods also overload those operators.

適切な文字列比較の(オーバーロードされた)ブール値を返す。 このメソッドはまた、これらの演算子をオーバーロードする。

eqi(EXPR), nei(EXPR), lti(EXPR), gti(EXPR), lei(EXPR), gei(EXPR)

These methods are case-insensitive versions of the above operators.

これらのメソッドは上の演算子の大小文字を無視するバージョンである。

is_true, is_false

Returns the (overloaded) boolean status of the value.

その値の(オーバーロードされた)ブール状態を返す。

エクスポート

Three subroutines dealing with how properties are propagated are automatically exported. For an example of propagation, see the DESCRIPTION section above.

プロパティの伝播のさせ方を扱う三つのサブルーチンが自動的に エクスポートされる。伝播の例としては、上の「説明」セクションを 参考のこと。

pass_on(LIST)

Sets (replaces) the list of properties that are passed on. There is only one such list for the whole mechanism. The whole property interface is experimental, but this one in particular is likely to change in the future.

渡されるプロパティのリストをセット(置き換え)する。メカニズム全体 を通してそのようなリストは一つだけである。プロパティのインターフェース は全て実験的なものであるが、とりわけこの関数は将来変更される可能性が 高い。

passed_on(STRING)

Tests whether a property is passed on and returns a boolean value.

あるプロパティが渡されたかどうかテストし、ブール値を返す。

get_pass_on

Returns a list of names of properties that are passed on.

渡されたプロパティ名のリストを返す。

バグ

None known so far. If you find any bugs or oddities, please do inform the authors.

今のところ知られているものはない。もし何らかのバグや奇妙な点を発見したら 作者までお知らせ願いたい。

作者

James A. Duncan <jduncan@fotango.com>

Marcel Grunauer, <marcel@codewerk.com>

Some contributions from David Cantrell, <david@cantrell.org.uk>

著作権

Copyright 2001 Marcel Grunauer, James A. Duncan. Portions copyright 2003 David Cantrell. All rights reserved.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

参考

perl(1), overload(3pm), Perl 6's properties.

補足

[訳者による]

現在のScalar::Propertiesを使うと、ダブルクォーテーション内の エスケープシーケンスが正しく処理されません。これはオーバーロード された整数定数、浮動定数及び文字列定数によって呼び出される Scalar::Properties::handle()に渡される引数のうち、第一番目、 すなわちオリジナルの定数が、実際の展開の際に使われるためです。 例えば"\n"はそのままオブジェクト内に'\n'として収まります。 そのためこれが表示される際には改行にならずに'\n'として表示されます (\nに関しては簡単な回避策がコード内に書かれていますが、実際には 不十分ですし、他のキャラクタに対応していません)。 この問題を回避するために、Scalar::Propertiesの128行目を次のように 変更し、

 - my $v = ref $_[0] eq __PACKAGE__ ? $_[0]->{_value} : "$_[0]";
 + my $v = ref $_[0] eq __PACKAGE__ ? $_[0]->{_interp} : "$_[0]";

129行目を削除します。_interpはPerlが解釈した値が入っています。

今のところ、訳者のわかる範囲では不具合は出ていません。

参考:overload, overload::constant

[追記] 0.12で上記修正が適用されました。