アプリ版:「スタンプのみでお礼する」機能のリリースについて

@st=qw(az b cz);
print scalar(sort(@st));
print scalar(grep /../,@st);
print scalar(map {$_.'z'} @st);

出力結果が

2
3
なのですがgrepやmapがリストの要素数を出力しているのに
なぜsortだけが要素数を出力しないのかがわかりません。

A 回答 (2件)

そういう「仕様」だからです。



perl の関数は、 scalar と list のどちらで評価されているかによって、返す値を変えることができます。
例えば、localtime 関数は、list context だと日時を配列で返しますが、
scalar context だとフォーマットを整えた文字列を返します。
print join(',',localtime). "\n";
print scalar(localtime)."\n";

map や grep は、「list context の時は結果のリストを返す」「scalar context の時は、結果の要素の数を返す」という仕様になってます。
(これは、配列を scalar context で評価した場合と同じ挙動です)

ですが、sort 関数は「list context の時はソートしたリストを返す」「scalar context の時は何を返すかは未定義」という仕様になっているのです。
    • good
    • 0

sort - perldoc.perl.org


http://perldoc.perl.org/functions/sort.html

> In scalar context, the behaviour of sort() is undefined.
って書いてあるので未定義なんでしょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!