2章 スカラーデータ
この章でわかること
読んでいく
オーディオコメンタリー方式で、言いたいこと、補足があるぶぶんだけ書いていきます。
- スカラー Scalar
- 数値
- 文字列
- (文字列って配列じゃないんですね、参照なのかな、値なのかな)
- どんなバイナリも突っ込めるので、画像なんかも一旦文字列として格納するらしい
- Unicode のリテラルを扱いたい場合は
utf8
プラグマを使う - リテラル
- スカラー変数
- sigil …
$
@
%
のこと- 対象の変数の扱い方を決定する記号
- ひとつの値(Scalar Value)を格納するもの
- sigil …
- if control structure
- いわゆる if 文のこと
- curly brace が必須
- 行入力演算子
<STDIN>
- chomp
- 引数に指定された文字列の末尾に改行文字があればそれを削除する
- 未定義値
- 警告
warnings
pragma- warnings を出すようになる
12fred34
のような文字列を数値として扱おうとしたときなど
- warnings を出すようになる
diagnostics
pragma- warnings に加え、詳細な説明を出すようになる
- stack trace も出る
- プロセスの起動が若干遅くなる
補足事項です。
- pragma
- https://perldoc.jp/docs/perl/5.36.0/perlpragma.pod
- 行為、事実、事物、重要事、問題を意味するギリシャ語
use
句で有効化、no
句で無効化できる- このとき、スコープが意識される
- スコープ
- レキシカルスコープでの変数宣言
my
- lexical … 修辞的な
- 書いた場所ベースでスコープが変化する、という程度の意味
- lexical … 修辞的な
- パッケージレベルでグローバルな変数の宣言
our
local
パッケージ変数を一時的に上書きするmy
とlocal
の違い?local
では処理がスコープの外に出るまで、一時的に変数を読み替える(変数自体は同じもので、値だけが異なる)らしい- サブルーチンA 内で、
local
な変数を宣言してサブルーチン Bを呼び出したときに、B 内でもA内で定義された値が使われる、というレキシカルではない挙動をする
- サブルーチンA 内で、
- https://perldoc.jp/docs/perl/strict.pod
- グローバル
- 修飾子なしでの変数宣言
- サブルーチンのスコープ
- サブルーチンはスコープの影響を受けない
- 定義された時点でシンボルテーブルに載るため
- スコープを持たせる場合はレキシカル変数に無名サブルーチンを格納すればよい
- 処理がスコープ外に出ると、無名サブルーチンの リファレンスが 解放される
- 無名サブルーチン自体は、無名なままシンボルテーブルに載る
- サブルーチンはスコープの影響を受けない
- レキシカルスコープでの変数宣言
生まれた疑問点
ここでは特になかったです。
おわりに
スカラーデータが紹介されました。 これが何かを本質的に知るには、スカラーではないデータは何か、を知る必要がありそうです。 次章以降に期待しましょう。
また、数値と文字列とで利用する演算子が異なるのは、プログラミング言語では珍しい気がします。 これでバグを埋め込んでしまわないように気をつけないとですね。