scalar関数 - スカラコンテキストで評価



  1. Perl




  2. 関数



  3. here

scalar関数を使用すると、スカラコンテキストを強制することができます。

# スカラコンテキストで評価
scalar 実行文

たとえば配列をスカラコンテキストで評価すると配列の個数が取り出せますが、scalar関数を使って明示的に書くと以下のようになります。

# 配列の個数
my $count = scalar @values;
scalar関数は使わなくってよい?

プログラムを工夫して書けばscalar関数を使わないでプログラムを書くことができます。

たとえば、サブルーチンの引数に値を渡す場合は、変数を経由して渡すようにします。

# 配列の個数を直接渡す
foo(scalar @values);

# 配列の個数をスカラ変数に保存してから渡す
my $count = @values;
foo($count);

変数名を上手につけると自己説明的になって、プログラムが読みやすくなります。多くの場合は、scalar関数を使うよりは、変数に一度代入してから、他の場所で使うのがお勧めです。



  1. Perl




  2. 関数



  3. here

配列の要素数を取得する



  1. Perl



  2. 配列


  3. here

配列の要素数を取得するには、配列スカラコンテキストで評価します。

my $length = @nums;

配列の要素数というのは、配列の長さ、配列の要素の個数とも呼ばれます。

Perlにおいては、長さを取得する関数のようなものはなく、配列をスカラコンテキストで評価することで、配列の要素数を取得することができます。

一番簡単な方法は、上記のように、スカラ変数に代入することです。こうすれば、@numsはスカラコンテキストで評価されて、$lengthに配列の要素数が代入されます。

スカラコンテキスト



  1. Perl




  2. 構文




  3. コンテキスト



  4. here

Perlにはコンテキストと呼ばれる概念があり、スカラとして評価される文脈をカラコンテキストといいます。

スカラ変数への代入

スカラ変数への代入はスカラコンテキストです。配列はスカラコンテキストで評価すると、配列の長さを返します。

my $num = @values;
比較演算子の項

比較演算子の左右の項はスカラコンテキストです。

$x < @values
$x == @values

for文のループで頻繁に目にします。

for (my $i = 0; $i < @nums; $i++) {
  ...
}
ifの条件部

ifの条件部はスカラコンテキストです。以下では@valuesはスカラコンテキストで評価されるので、配列の個数を返します。

if (@values) {
  ...
}



  1. Perl




  2. 構文




  3. コンテキスト



  4. here

リストコンテキスト



  1. Perl




  2. 構文




  3. コンテキスト



  4. here

Perlにはコンテキストと呼ばれる概念があり、リストとして評価される文脈をリストコンテキストといいます。

配列への代入

配列への代入はリストコンテキストです。

my @values2 = @values;
リスト

リストの内側はリストコンテキストです。

(@values);
無名配列生成子

無名配列生成子の内側はリストコンテキストです。

[@values];
無名ハッシュ生成子

無名ハッシュ生成子の内側はリストコンテキストです。

{@values};

自動的に展開されて、気が付きにくい場所ですので、注意してください。

サブルーチンの引数

サブルーチンの引数は、リストコンテキストです。

func(@values);

自動的に展開されて、気が付きにくい場所ですので、注意してください。



  1. Perl




  2. 構文




  3. コンテキスト



  4. here

読み込まれているモジュールを調べる %INC



  1. Perl




  2. 特殊変数



  3. here

読み込まれているモジュールを調べるには%INCという特殊変数を使います。

%INC

%INC ハッシュは、モジュール名とモジュールのファイル名の組み合わせが、代入されています。モジュール名と、実際にどのファイルをインポートしたのかがわかります。Data::Dumperで出力した結果は以下のようになっています。

$VAR1 = {
          'Data/Dumper.pm' => 'C:/Strawberry/perl/lib/Data/Dumper.pm',
          'XSLoader.pm' => 'C:/Strawberry/perl/lib/XSLoader.pm',
          'feature.pm' => 'C:/Strawberry/perl/lib/feature.pm',
          'Carp.pm' => 'C:/Strawberry/perl/lib/Carp.pm',
          'warnings.pm' => 'C:/Strawberry/perl/lib/warnings.pm',
          'bytes.pm' => 'C:/Strawberry/perl/lib/bytes.pm',
          'strict.pm' => 'C:/Strawberry/perl/lib/strict.pm',
          'Exporter.pm' => 'C:/Strawberry/perl/lib/Exporter.pm',
          'warnings/register.pm' => 'C:/Strawberry/perl/lib/warnings/register.pm',
          'constant.pm' => 'C:/Strawberry/perl/lib/constant.pm'
        };

%INCはモジュールの検索パスが格納されている、 @INC とは何の関係もありません。@INC と %INC はまったく別の変数です。モジュール名だけを知りたい場合は、keys関数で、キーだけを取り出してあげます。



  1. Perl




  2. 特殊変数



  3. here

Perlのイベント情報

Perlのイベント情報は、Twitterのモーメントに移行しました。

Perlのイベント情報 - Twitterモーメント

2018年

8月25日(土) Perl入学式 in 沖縄 第4回 〜サブルーチン/正規表現編〜
9月8日(土) Perl入学式 in大阪 第3回 〜配列/ハッシュ編〜
9月14日(金) 六本木.pm (株式会社メルカリ 六本木ヒルズ森タワー18F)
9月15日(土) Perl入学式 in札幌 第2回 〜構文基礎編〜
2019年の年始 YAPC 東京 2018

OS名を取得する $^O



  1. Perl




  2. 特殊変数



  3. here

OS名を取得するには$^Oという特殊変数を使用します。

$^O
$^O の値とOSの種類

各OSにおける「$^O」の値をまとめました。

$^Oの値 説明とリンク
MacOS  MacOS
MSWin32 Windows 全般
os2 OS/2
VMS VMS
epoc EPOC OS  (たぶん)
NetWare NetWare
symbian Symbian OS
dos MS-DOS
cygwin cygwin
linux Linux
freebsd FreeBSD
solaris Solaris
Unix ( 違うかも ) Unix
darwin Mac OS X
CentOS Linux



  1. Perl




  2. 特殊変数



  3. here