名前¶
perlintro - a brief introduction and overview of Perl
perlintro - Perl の概要
説明¶
This document is intended to give you a quick overview of the Perl programming language, along with pointers to further documentation. It is intended as a "bootstrap" guide for those who are new to the language, and provides just enough information for you to be able to read other peoples' Perl and understand roughly what it's doing, or write your own simple scripts.
この文書は Perl プログラミング言語の簡単な概要を伝えて、更なる 文書へのポインタを示すことを目的としています。 これはこの言語を知らない人のためへの「自習」ガイドを目的としていて、 他の人の Perl を読んで何をしているかを大まかに理解したり、 自分自身で簡単なスクリプトを書くことができるようになるために 十分な情報を提供しています。
This introductory document does not aim to be complete. It does not even aim to be entirely accurate. In some cases perfection has been sacrificed in the goal of getting the general idea across. You are strongly advised to follow this introduction with more information from the full Perl manual, the table of contents to which can be found in perltoc.
この導入文書は完全性を目的とはしていません。 完全な正確性すらも目的にしていません。 場合によっては、一般的な考え方を得るというゴール野のために正確性を 犠牲にしています。 この概要を読んだ後、完全な Perl マニュアル(目次は perltoc にあります)から さらなる情報を得ることを強く 勧めます。
Throughout this document you'll see references to other parts of the Perl documentation. You can read that documentation using the perldoc
command or whatever method you're using to read this document.
この文書のあちこちに、他の Perl 文書のへの参照があります。 これらの文書は、perldoc
コマンドや、この文書を読むために使っている 方法を使って読むことができます。
Throughout Perl's documentation, you'll find numerous examples intended to help explain the discussed features. Please keep in mind that many of them are code fragments rather than complete programs.
Perl の文書のあちこちに、議論している機能の説明を助けることを意図した たくさんの例があります。 これらの多くは完全なプログラムではなく、コード片であることに 留意してください。
These examples often reflect the style and preference of the author of that piece of the documentation, and may be briefer than a corresponding line of code in a real program. Except where otherwise noted, you should assume that use strict
and use warnings
statements appear earlier in the "program", and that any variables used have already been declared, even if those declarations have been omitted to make the example easier to read.
これらの例はしばしば文書の作者のスタイルと好みを反映していて、 実際のプログラムでの対応するコードよりもより簡潔かも知れません。 特に記述のない限り、「プログラム」の前に use strict
と use warnings
の 文があって、全ての変数は既に宣言されていると仮定するべきです; たとえ例を読みやすくするためにこれらの宣言が省略されていてもです。
Do note that the examples have been written by many different authors over a period of several decades. Styles and techniques will therefore differ, although some effort has been made to not vary styles too widely in the same sections. Do not consider one style to be better than others - "There's More Than One Way To Do It" is one of Perl's mottos. After all, in your journey as a programmer, you are likely to encounter different styles.
例は数十年の期間にわたって多くの異なった作者によって書かれていることに 注意してください。 従って、スタイルとテクニックは異なりますが、同じ節であまりにも 幅広い異なったスタイルにならないように努力はされています。 あるスタイルが他の物より優れていると考えないでください - 「やり方は一つじゃない」が Perl のモットーです。 結局の所、プログラマとしての旅の途中で、異なったスタイルに出会う ことになります。
Perl って何?¶
Perl is a general-purpose programming language originally developed for text manipulation and now used for a wide range of tasks including system administration, web development, network programming, GUI development, and more.
Perl は、元々テキスト操作のために開発されましたが、今では システム管理、ウェブ開発、ネットワークプログラミング、GUI 開発などを 含む広い範囲で使われている汎用プログラミング言語です。
The language is intended to be practical (easy to use, efficient, complete) rather than beautiful (tiny, elegant, minimal). Its major features are that it's easy to use, supports both procedural and object-oriented (OO) programming, has powerful built-in support for text processing, and has one of the world's most impressive collections of third-party modules.
この言語は、綺麗さ (小規模、エレガント、最少) ではなく、 実用性 (使い易さ、効率、完全性) を目指しています。 主な機能は、簡単に使える、手続き的とオブジェクト指向 (OO) の両方で プログラミングできる、テキスト処理のための強力な組み込み機能がある、 世界でもっともめざましいサードパーティモジュールのコレクションがある、と いったことです。
Different definitions of Perl are given in perl, perlfaq1 and no doubt other places. From this we can determine that Perl is different things to different people, but that lots of people think it's at least worth writing about.
Perl の異なった定義は perl と perlfaq1 にあり、きっと他の 場所にもあります。 ここから、Perl は色々な人によって色々な定義ができますが、多くの人々は 少なくとも書く価値があると考えています。
Perl プログラムの実行¶
To run a Perl program from the Unix command line:
Unix コマンドラインから Perl プログラムを実行するには:
perl progname.pl
Alternatively, put this as the first line of your script:
あるいは、スクリプトの先頭行に以下のように書いておいて:
#!/usr/bin/env perl
... and run the script as /path/to/script.pl. Of course, it'll need to be executable first, so chmod 755 script.pl
(under Unix).
…そしてスクリプトを /path/to/script.pl として実行します。 もちろん、このためには先に (Unix では) chmod 755 script.pl
のようにして、 実行可能にする必要があります。
(This start line assumes you have the env program. You can also put directly the path to your perl executable, like in #!/usr/bin/perl
).
(この開始行は、env プログラムがあることを仮定しています。 #!/usr/bin/perl
のように、perl 実行ファイルへのパスを直接 書くこともできます)。
For more information, including instructions for other platforms such as Windows, read perlrun.
Windows のような他のプラットホームでの説明を含む、さらなる 情報については、perlrun を読んでください。
セーフティネット¶
Perl by default is very forgiving. In order to make it more robust it is recommended to start every program with the following lines:
Perl はデフォルトでは非常に寛大です。 より堅牢にするには、全てのプログラムの先頭に以下の行を書くことが 推奨されています:
#!/usr/bin/perl
use strict;
use warnings;
The two additional lines request from perl to catch various common problems in your code. They check different things so you need both. A potential problem caught by use strict;
will cause your code to stop immediately when it is encountered, while use warnings;
will merely give a warning (like the command-line switch -w) and let your code run. To read more about them, check their respective manual pages at strict and warnings.
追加した 2 行は、コードにある様々な一般的な問題を捕らえるように perl に 要求します。 この 2 行は別のことをチェックするので、両方が必要です。 use strict;
によって捕捉される潜在的な問題は、コードに発見されると 直ちに停止する一方、use warnings;
は (コマンドラインオプション -w と同様) 警告を出すだけで、コードは実行されます。 これらに関するさらなる情報は、strict と warnings にあるそれぞれの マニュアルページをチェックしてください。
A use v5.35
(or higher) declaration will enable both strict
and warnings
:
use v5.35
(またはそれ以上の) 宣言をすると、 strict
と warnings
の両方を有効にします:
#!/usr/bin/perl
use v5.35;
In addition to enabling the strict
and warnings
pragmata, this declaration will also activate a "feature bundle"; a collection of named features that enable many of the more recent additions and changes to the language, as well as occasionally removing older features found to have been mistakes in design and discouraged.
この宣言は、strict
と warnings
プラグマを有効にすることに加えて、 機能の束("feature bundle") も有効にします; これは名前付き機能の集合で、多くはより最近に言語に追加、変更されたものを 有効にし、仕様上の誤りがあると分かり非推奨になったものを時々 削除したものです。
基本的な文法の概要¶
A Perl script or program consists of one or more statements. These statements are simply written in the script in a straightforward fashion. There is no need to have a main()
function or anything of that kind.
Perl スクリプトあるいはプログラムは 1 行以上の文で構成されます。 これらの文は直接的な形でスクリプトに書かれます。 main()
関数あるいは似たようなものは不要です。
Perl statements end in a semi-colon:
Perl の文はセミコロンで終端されます:
print "Hello, world";
Comments start with a hash symbol and run to the end of the line
コメントは # マークで始まり、行末まで続きます:
# This is a comment
# これはコメント
Whitespace is irrelevant:
空白は無視されます:
print
"Hello, world"
;
... except inside quoted strings:
…但しクォートされた文字列の中は例外です:
# this would print with a linebreak in the middle
print "Hello
world";
# これは途中に改行が入る
print "Hello
world";
Double quotes or single quotes may be used around literal strings:
ダブルクォートやシングルクォートはリテラル文字列をくくるのに使われます:
print "Hello, world";
print 'Hello, world';
However, only double quotes "interpolate" variables and special characters such as newlines (\n
):
しかし、ダブルクォートのみが変数と改行(\n
)のような特殊文字を 「展開」します:
print "Hello, $name\n"; # works fine
print 'Hello, $name\n'; # prints $name\n literally
print "Hello, $name\n"; # うまく動作する
print 'Hello, $name\n'; # $name\n という文字をそのまま表示する
Numbers don't need quotes around them:
数値はクォートする必要はありません:
print 42;
You can use parentheses for functions' arguments or omit them according to your personal taste. They are only required occasionally to clarify issues of precedence.
関数の引数のかっこは、好みで付けたり省略したりできます。 必要なのは、優先順位の問題を明確化するときだけです。
print("Hello, world\n");
print "Hello, world\n";
More detailed information about Perl syntax can be found in perlsyn.
Perl の文法に関するさらに詳細な情報は perlsyn にあります。
Perl の変数型¶
Perl has three main variable types: scalars, arrays, and hashes.
Perl には三つの主な変数型があります: スカラ、配列、ハッシュです。
- Scalars
-
(スカラ)
A scalar represents a single value:
スカラは単一の値を表現します:
my $animal = "camel"; my $answer = 42;
Scalar values can be strings, integers or floating point numbers, and Perl will automatically convert between them as required. You have to declare them using the
my
keyword the first time you use them. (This is one of the requirements ofuse strict;
.)スカラ値には文字列、整数、浮動小数点数があり、Perl は必要なときに自動的に これらの値を相互に変換します。 変数を使うときには
my
キーワードを使って宣言する必要があります。 (これはuse strict;
が要求することの一つです。)Scalar values can be used in various ways:
スカラ値は色々な方法で利用できます:
print $animal; print "The animal is $animal\n"; print "The square of $answer is ", $answer * $answer, "\n";
Perl defines a number of special scalars with short names, often single punctuation marks or digits. These variables are used for all kinds of purposes, and are documented in perlvar. The only one you need to know about for now is
$_
which is the "default variable". It's used as the default argument to a number of functions in Perl, and it's set implicitly by certain looping constructs.Perl は、しばしば単一の句読点や数字のように見える短い名前を持った、 多くの特殊スカラ変数を定義しています。 これらの変数はあらゆる目的のために利用され、perlvar に 文書化されています。 今のところ知っておくべきただ一つのことは、「デフォルト変数」である
$_
です。 これは Perl の多くの関数でデフォルト引数として使われ、ある種のループ構造で 暗黙に設定されます。print; # prints contents of $_ by default
print; # デフォルトで $_ の内容を表示する
- Arrays
-
(配列)
An array represents a list of values:
配列は値のリストを表現します:
my @animals = ("camel", "llama", "owl"); my @numbers = (23, 42, 69); my @mixed = ("camel", 42, 1.23);
Arrays are zero-indexed. Here's how you get at elements in an array:
配列は添え字 0 から始まります。 以下は配列の要素を取得する方法です:
print $animals[0]; # prints "camel" print $animals[1]; # prints "llama"
print $animals[0]; # "camel" を表示する print $animals[1]; # "llama" を表示する
The special variable
$#array
tells you the index of the last element of an array:特殊変数
$#array
は、配列の最後の要素の添え字を返します:print $mixed[$#mixed]; # last element, prints 1.23
print $mixed[$#mixed]; # 最後の要素である 1.23 を表示する
You might be tempted to use
$#array + 1
to tell you how many items there are in an array. Don't bother. As it happens, using@array
where Perl expects to find a scalar value ("in scalar context") will give you the number of elements in the array:配列にある要素の数を知るのに
$#array + 1
を使いたくなるかも知れません。 心配はいりません。 偶然にも、Perl がスカラ値を想定しているところ(「スカラコンテキスト」)で@array
を使うと、配列の要素の数を返します:if (@animals < 5) { ... }
The elements we're getting from the array start with a
$
because we're getting just a single value out of the array; you ask for a scalar, you get a scalar.配列から一つの値を取り出したいだけなので、配列の要素は
$
で始まります; スカラを得ようとすれば、スカラを得ます。To get multiple values from an array:
配列から複数の値を得るには:
@animals[0,1]; # gives ("camel", "llama"); @animals[0..2]; # gives ("camel", "llama", "owl"); @animals[1..$#animals]; # gives all except the first element
@animals[0,1]; # ("camel", "llama") を返す @animals[0..2]; # ("camel", "llama", "owl") を返す @animals[1..$#animals]; # 最初の要素以外全てを返す
This is called an "array slice".
これは「配列スライス」と呼ばれます。
You can do various useful things to lists:
リストに対して色々便利なことが出来ます:
my @sorted = sort @animals; my @backwards = reverse @numbers;
There are a couple of special arrays too, such as
@ARGV
(the command line arguments to your script) and@_
(the arguments passed to a subroutine). These are documented in perlvar.@ARGV
(スクリプトのコマンドライン引数) や@_
(サブルーチンに渡された 引数) のように、色々な特殊配列もあります。 これらは perlvar に文書化されています。 - Hashes
-
(ハッシュ)
A hash represents a set of key/value pairs:
ハッシュはキー/値の組の集合を表現します:
my %fruit_color = ("apple", "red", "banana", "yellow");
You can use whitespace and the
=>
operator to lay them out more nicely:より見やすくするために、空白と
=>
演算子が使えます:my %fruit_color = ( apple => "red", banana => "yellow", );
To get at hash elements:
ハッシュの要素を得るには:
$fruit_color{"apple"}; # gives "red"
$fruit_color{"apple"}; # "red" を返す
You can get at lists of keys and values with
keys()
andvalues()
.キーのリストと値のリストは
keys()
とvalues()
で得られます。my @fruits = keys %fruit_color; my @colors = values %fruit_color;
Hashes have no particular internal order, though you can sort the keys and loop through them.
ハッシュには特に決まった順序はありませんが、キーをソートして、 それを使ってループできます。
Just like special scalars and arrays, there are also special hashes. The most well known of these is
%ENV
which contains environment variables. Read all about it (and other special variables) in perlvar.特殊スカラおよび配列と同様、特殊ハッシュもあります。 そのうち最もよく知られているものは、環境変数が入っている
%ENV
です。 これら全て (およびその他の特殊変数) は perlvar にあります。
Scalars, arrays and hashes are documented more fully in perldata.
スカラ、配列、ハッシュについては perldata により完全に 文書化されています。
More complex data types can be constructed using references, which allow you to build lists and hashes within lists and hashes.
より複雑なデータ型は、リストやハッシュの中にリストやハッシュを 入れることができるリファレンスを使って構築できます。
A reference is a scalar value and can refer to any other Perl data type. So by storing a reference as the value of an array or hash element, you can easily create lists and hashes within lists and hashes. The following example shows a 2 level hash of hash structure using anonymous hash references.
リファレンスはスカラ値で、任意の他の Perl データを参照できます。 従って、リファレンスを配列やハッシュの値として格納することで、 リストやハッシュの中に簡単にリストやハッシュを作成できます。 以下の例は、無名ハッシュリファレンスを使った 2 レベルのハッシュのハッシュを 説明しています:
my $variables = {
scalar => {
description => "single item",
sigil => '$',
},
array => {
description => "ordered list of items",
sigil => '@',
},
hash => {
description => "key/value pairs",
sigil => '%',
},
};
print "Scalars begin with a $variables->{'scalar'}->{'sigil'}\n";
Exhaustive information on the topic of references can be found in perlreftut, perllol, perlref and perldsc.
リファレンスに関する包括的な情報は、 perlreftut, perllol, perlref, perldsc にあります。
変数のスコープ¶
Throughout the previous section all the examples have used the syntax:
前述した章の全体で、全ての例は以下の文法を使っています:
my $var = "value";
The my
is actually not required; you could just use:
my
は実際には必要ではありません; 単に以下のようにも使えます:
$var = "value";
However, the above usage will create global variables throughout your program, which is bad programming practice. my
creates lexically scoped variables instead. The variables are scoped to the block (i.e. a bunch of statements surrounded by curly-braces) in which they are defined.
しかし、上述の使用法はプログラム全体でグローバルな変数を作ることになり、 これは悪いプログラミング手法です。 代わりに、my
はレキシカルなスコープを持った変数を作ります。 変数は、宣言されたブロック (中かっこで囲まれた文のかたまり) 内の スコープを持ちます。
my $x = "foo";
my $some_condition = 1;
if ($some_condition) {
my $y = "bar";
print $x; # prints "foo"
print $y; # prints "bar"
}
print $x; # prints "foo"
print $y; # prints nothing; $y has fallen out of scope
my $x = "foo";
my $some_condition = 1;
if ($some_condition) {
my $y = "bar";
print $x; # "foo" を表示する
print $y; # "bar" を表示する
}
print $x; # "foo" を表示する
print $y; # 何も表示しない; $y はスコープ外
Using my
in combination with a use strict;
at the top of your Perl scripts means that the interpreter will pick up certain common programming errors. For instance, in the example above, the final print $y
would cause a compile-time error and prevent you from running the program. Using strict
is highly recommended.
Perl スクリプトの先頭に use strict;
を書くことと合わせて my
を 使うことによって、インタプリタがある種のよくあるプログラミングミスを 検出できます。 例えば、上述の例で、最後の print $y
はコンパイルエラーとなり、 プログラムの実行を妨げます。 strict
を使うことを強く勧めます。
条件とループ構造¶
Perl has most of the usual conditional and looping constructs.
Perl には、一般的な条件構文とループ構文のほとんど全てがあります。
The conditions can be any Perl expression. See the list of operators in the next section for information on comparison and boolean logic operators, which are commonly used in conditional statements.
任意の Perl 式は条件となります。 条件文でよく使われる、比較演算子と真偽値論理演算子に関する情報については、 次の節にある演算子の一覧を参照してください。
- if
-
if ( condition ) { ... } elsif ( other condition ) { ... } else { ... }
There's also a negated version of it:
これの否定版もあります:
unless ( condition ) { ... }
This is provided as a more readable version of
if (!condition)
.これは、
if (!condition)
をより読みやすくしたものです。Note that the braces are required in Perl, even if you've only got one line in the block. However, there is a clever way of making your one-line conditional blocks more English like:
たとえブロック中に 1 行しかなくても、Perl では中かっこが必要であることに 注意してください。 しかし、1 行の条件ブロックをより英語風にする気の利いた方法があります:
# the traditional way if ($zippy) { print "Yow!"; }
# 伝統的な方法 if ($zippy) { print "Yow!"; }
# the Perlish post-condition way print "Yow!" if $zippy; print "We have no bananas" unless $bananas;
# Perl っぽい後置条件 print "Yow!" if $zippy; print "We have no bananas" unless $bananas;
- while
-
while ( condition ) { ... }
There's also a negated version, for the same reason we have
unless
:unless
があるのと同じ理由で、これにも否定版があります。until ( condition ) { ... }
You can also use
while
in a post-condition:while
を後置条件にも使えます:print "LA LA LA\n" while 1; # loops forever
print "LA LA LA\n" while 1; # 無限ループ
- for
-
Exactly like C:
完全に C と同様です:
for ($i = 0; $i <= $max; $i++) { ... }
The C style for loop is rarely needed in Perl since Perl provides the more friendly list scanning
foreach
loop.C 形式のループは Perl ではめったに必要ではありません; なぜなら Perl は より親切なリストスキャンである
foreach
ループがあるからです。 - foreach
-
foreach (@array) { print "This element is $_\n"; } print $list[$_] foreach 0 .. $max;
# you don't have to use the default $_ either... foreach my $key (keys %hash) { print "The value of $key is $hash{$key}\n"; }
# デフォルトの $_ を使う必要はない… foreach my $key (keys %hash) { print "The value of $key is $hash{$key}\n"; }
The
foreach
keyword is actually a synonym for thefor
keyword. See"Foreach Loops" in perlsyn
.foreach
キーワードは実際にはfor
キーワードの別名です。"Foreach Loops" in perlsyn
を参照してください。
For more detail on looping constructs (and some that weren't mentioned in this overview) see perlsyn.
ループ構造に関するさらなる詳細 (およびこの概説で触れていないこと) に ついては perlsyn を参照してください。
組み込みの演算子と関数¶
Perl comes with a wide selection of builtin functions. Some of the ones we've already seen include print
, sort
and reverse
. A list of them is given at the start of perlfunc and you can easily read about any given function by using perldoc -f functionname
.
Perl は幅広い組み込み関数を持っています。 print
, sort
, reverse
など、その一部は既に見てきました。 その一覧は perlfunc の先頭にあり、関数の説明は perldoc -f functionname
とすることで簡単に読むことができます。
Perl operators are documented in full in perlop, but here are a few of the most common ones:
Perl の演算子は perlop に完全に文書化されていますが、もっとも 一般的なものをいくつか以下に示します:
- Arithmetic
-
(数値演算)
+ addition - subtraction * multiplication / division
+ 加算 - 減算 * 乗算 / 除算
- Numeric comparison
-
(数値比較)
== equality != inequality < less than > greater than <= less than or equal >= greater than or equal
== 相等 != 不等 < より小さい > より大きい <= 以下 >= 以上
- String comparison
-
(文字列比較)
eq equality ne inequality lt less than gt greater than le less than or equal ge greater than or equal
eq 相等 ne 不等 lt より小さい gt より大きい le 以下 ge 以上
(Why do we have separate numeric and string comparisons? Because we don't have special variable types, and Perl needs to know whether to sort numerically (where 99 is less than 100) or alphabetically (where 100 comes before 99).
(どうして数値比較と文字列比較が分かれているのでしょう? なぜなら、特別な変数型はないので、数値として扱う (99 は 100 より小さい) か、文字として扱う (100 は 99 の前) かを Perl に知らせる必要があるからです)。
- Boolean logic
-
(真偽値論理)
&& and || or ! not
(
and
,or
andnot
aren't just in the above table as descriptions of the operators. They're also supported as operators in their own right. They're more readable than the C-style operators, but have different precedence to&&
and friends. Check perlop for more detail.)(
and
,or
,not
は演算子の記述としては上述の表にはありません。 これらも本来の演算子として対応しています。 これらは C 形式の演算子より読みやすいですが、&&
およびその仲間とは 異なった優先順位を持ちます。 さらなる詳細については perlop を参照してください。) - Miscellaneous
-
(その他)
= assignment . string concatenation x string multiplication (repeats strings) .. range operator (creates a list of numbers or strings)
= 代入 . 文字列結合 x 文字列乗算 (文字列の繰り返し) .. 範囲演算子 (数値や文字列のリストを作る)
Many operators can be combined with a =
as follows:
多くの演算子は、以下のように =
と組み合わせることができます:
$x += 1; # same as $x = $x + 1
$x -= 1; # same as $x = $x - 1
$x .= "\n"; # same as $x = $x . "\n";
$x += 1; # $x = $x + 1 と同じ
$x -= 1; # $x = $x - 1 と同じ
$x .= "\n"; # $x = $x . "\n"; と同じ
ファイルと I/O¶
You can open a file for input or output using the open()
function. It's documented in extravagant detail in perlfunc and perlopentut, but in short:
open()
関数を使って、入力や出力のためにファイルを開けます。 perlfunc と perlopentut に非常に詳細に文書化されていますが、 簡単には:
open(my $in, "<", "input.txt") or die "Can't open input.txt: $!";
open(my $out, ">", "output.txt") or die "Can't open output.txt: $!";
open(my $log, ">>", "my.log") or die "Can't open my.log: $!";
You can read from an open filehandle using the <>
operator. In scalar context it reads a single line from the filehandle, and in list context it reads the whole file in, assigning each line to an element of the list:
<>
演算子を使って、開いているファイルハンドルから読み込めます。 スカラコンテキストではファイルハンドルから 1 行を読み込み、リスト コンテキストではファイル全体を読み込んで、それぞれの行をリストの要素に 代入します:
my $line = <$in>;
my @lines = <$in>;
Reading in the whole file at one time is called slurping. It can be useful but it may be a memory hog. Most text file processing can be done a line at a time with Perl's looping constructs.
ファイル全体を一度に読み込むことは「吸い込み」(slurping) と呼ばれます。 これは便利ですが、メモリを占有するかもしれません。 ほとんどのテキストファイル処理は、Perl のループ構文を使って 1 行ずつ処理できます。
The <>
operator is most often seen in a while
loop:
<>
演算子は、while
ループの中でもっともよく見られます:
while (<$in>) { # assigns each line in turn to $_
print "Just read in this line: $_";
}
while (<$in>) { # それぞれの行を $_ に代入する
print "Just read in this line: $_";
}
We've already seen how to print to standard output using print()
. However, print()
can also take an optional first argument specifying which filehandle to print to:
print()
を使って標準出力に出力する方法はすでに見てきました。 しかし、print()
はオプションとして、どのファイルハンドルに出力するかを 指定する第一引数を取ることもできます:
print STDERR "This is your final warning.\n";
print $out $record;
print $log $logmessage;
When you're done with your filehandles, you should close()
them (though to be honest, Perl will clean up after you if you forget):
ファイルハンドルを使ったら、close()
を使うべきです (しかし正直に言うと、もしあなたが忘れても Perl はあなたの後始末をします):
close $in or die "$in: $!";
正規表現¶
Perl's regular expression support is both broad and deep, and is the subject of lengthy documentation in perlrequick, perlretut, and elsewhere. However, in short:
Perl の正規表現サポートは広く深く、長い文書は perlrequick, perlretut およびどこにでもあります。 しかし、短く言うと:
- Simple matching
-
(単純なマッチング)
if (/foo/) { ... } # true if $_ contains "foo" if ($x =~ /foo/) { ... } # true if $x contains "foo"
if (/foo/) { ... } # $_ に "foo" が含まれていれば真 if ($x =~ /foo/) { ... } # $x に "foo" が含まれていれば真
The
//
matching operator is documented in perlop. It operates on$_
by default, or can be bound to another variable using the=~
binding operator (also documented in perlop).//
マッチング演算子は perlop に文書化されています。 これはデフォルトでは$_
を操作しますし、=~
結合演算子 (これも perlop で文書化されています) を使って他の変数に対して 適用することもできます。 - Simple substitution
-
(単純な置換)
s/foo/bar/; # replaces foo with bar in $_ $x =~ s/foo/bar/; # replaces foo with bar in $x $x =~ s/foo/bar/g; # replaces ALL INSTANCES of foo with bar # in $x
s/foo/bar/; # $_ にある foo を bar に置き換える $x =~ s/foo/bar/; # $x にある foo を bar に置き換える $x =~ s/foo/bar/g; # $x にある全ての foo を bar に置き換える
The
s///
substitution operator is documented in perlop.s///
置換演算子は perlop に文書化されています。 - More complex regular expressions
-
(より複雑な正規表現)
You don't just have to match on fixed strings. In fact, you can match on just about anything you could dream of by using more complex regular expressions. These are documented at great length in perlre, but for the meantime, here's a quick cheat sheet:
単に固定した文字列にマッチングさせる必要はありません。 実際の所、より複雑な正規表現を使うことによって、思い付く限りほとんど 全てのものとマッチングさせることが出来ます。 これらは perlre に長文で文書化されていますが、今のところは、以下に カンニングペーパーを示します:
. a single character \s a whitespace character (space, tab, newline, ...) \S non-whitespace character \d a digit (0-9) \D a non-digit \w a word character (a-z, A-Z, 0-9, _) \W a non-word character [aeiou] matches a single character in the given set [^aeiou] matches a single character outside the given set (foo|bar|baz) matches any of the alternatives specified
. 単一の文字 \s 空白文字(空白、タブ、改行…) \S 非空白文字 \d 数字 (0-9) \D 非数字 \w 単語文字 (a-z, A-Z, 0-9, _) \W 非単語文字 [aeiou] 指定された集合に含まれる単一の文字 [^aeiou] 指定された集合に含まれない単一の文字 (foo|bar|baz) 指定された代替のいずれかにマッチング
^ start of string $ end of string
^ 文字列の先頭 $ 文字列の末尾
Quantifiers can be used to specify how many of the previous thing you want to match on, where "thing" means either a literal character, one of the metacharacters listed above, or a group of characters or metacharacters in parentheses.
量指定子は直前に指定したマッチングさせたいものを何回マッチングさせたいかを 指定するために使います; ここで「もの」というのはリテラルな 1 文字、 上述したメタ文字の一つ、かっこに囲まれた文字やメタ文字のグループです。
* zero or more of the previous thing + one or more of the previous thing ? zero or one of the previous thing {3} matches exactly 3 of the previous thing {3,6} matches between 3 and 6 of the previous thing {3,} matches 3 or more of the previous thing
* 手前にあるものに 0 回以上マッチング + 手前にあるものに 1 回以上マッチング ? 手前にあるものに 1 回または 0 回マッチング {3} 手前にあるものにちょうど 3 回マッチング {3,6} 手前にあるものに 3 回から 6 回マッチング {3,} 手前にあるものに 3 回以上マッチング
Some brief examples:
いくつかの簡単な例です:
/^\d+/ string starts with one or more digits /^$/ nothing in the string (start and end are adjacent) /(\d\s){3}/ three digits, each followed by a whitespace character (eg "3 4 5 ") /(a.)+/ matches a string in which every odd-numbered letter is a (eg "abacadaf")
/^\d+/ 一つ以上の数字で始まる /^$/ 空文字列 (先頭と末尾が隣接している) /(\d\s){3}/ 3 桁の数字(それぞれに空白文字が引き続く) (例えば "3 4 5 ") /(a.)+/ 奇数番目が全て a である文字列 (例えば "abacadaf")
# This loop reads from STDIN, and prints non-blank lines: while (<>) { next if /^$/; print; }
# このループは STDIN から読み込み、非空行を表示する: while (<>) { next if /^$/; print; }
- Parentheses for capturing
-
(かっこと捕捉)
As well as grouping, parentheses serve a second purpose. They can be used to capture the results of parts of the regexp match for later use. The results end up in
$1
,$2
and so on.かっこは、グループ化だけではなく第二の目的の役目を果たします。 正規表現マッチングの一部の結果を後で使うために捕捉するために使えます。 結果は
$1
,$2
などに入ります。# a cheap and nasty way to break an email address up into parts
# e メールアドレスをパーツに分解するちゃちで扱いにくい方法 if ($email =~ /([^@]+)@(.+)/) { print "Username is $1\n"; print "Hostname is $2\n"; }
- Other regexp features
-
(その他の正規表現の機能)
Perl regexps also support backreferences, lookaheads, and all kinds of other complex details. Read all about them in perlrequick, perlretut, and perlre.
Perl の正規表現は、後方参照、前方参照およびその他のあらゆる種類の複雑な 詳細に対応しています。 perlrequick, perlretut, perlre でこれらに関する全てを読んでください。
サブルーチンを書く¶
Writing subroutines is easy:
サブルーチンを書くのは簡単です:
sub logger {
my $logmessage = shift;
open my $logfile, ">>", "my.log" or die "Could not open my.log: $!";
print $logfile $logmessage;
}
Now we can use the subroutine just as any other built-in function:
これでサブルーチンをその他の組み込み関数と同様に使えます:
logger("We have a logger subroutine!");
What's that shift
? Well, the arguments to a subroutine are available to us as a special array called @_
(see perlvar for more on that). The default argument to the shift
function just happens to be @_
. So my $logmessage = shift;
shifts the first item off the list of arguments and assigns it to $logmessage
.
shift
とはなんでしょう? ええっと、サブルーチンの引数は @_
と呼ばれる特殊配列として利用可能に なります (これに関する詳細は perlvar を参照してください)。 shift
関数のデフォルト引数は たまたま @_
です。 それで、my $logmessage = shift;
は引数のリストの最初のものを取り出して、 $logmessage
に代入します。
We can manipulate @_
in other ways too:
その他の方法でも @_
を操作できます:
my ($logmessage, $priority) = @_; # common
my $logmessage = $_[0]; # uncommon, and ugly
my ($logmessage, $priority) = @_; # 一般的
my $logmessage = $_[0]; # 一般的でもなく、美しくもない
Subroutines can also return values:
サブルーチンは値を返すこともできます:
sub square {
my $num = shift;
my $result = $num * $num;
return $result;
}
Then use it like:
それからこういう風に使います:
$sq = square(8);
For more information on writing subroutines, see perlsub.
サブルーチンの書き方に関するさらなる情報については、perlsub を 参照してください。
OO Perl¶
OO Perl is relatively simple and is implemented using references which know what sort of object they are based on Perl's concept of packages. However, OO Perl is largely beyond the scope of this document. Read perlootut and perlobj.
OO Perl は比較的単純で、オブジェクトが Perl の概念であるパッケージの どれに基づいているかを知っているリファレンスを使って実装されています。 しかし、OO Perl はこの文書の範囲からは大きく外れます。 perlootut と perlobj を読んでください。
As a beginning Perl programmer, your most common use of OO Perl will be in using third-party modules, which are documented below.
Perl プログラマを始めるに当たって、OO Perl の最も一般的な使用法は 以下に記述している、サードパーティーモジュールを使うことです。
Perl モジュールを使う¶
Perl modules provide a range of features to help you avoid reinventing the wheel, and can be downloaded from CPAN. A number of popular modules are included with the Perl distribution itself.
Perl モジュールは、車輪の再発明を避けるための様々な機能を提供していて、 CPAN からダウンロードできます。 多くの有名なモジュールは Perl 配布自身に含まれています。
Categories of modules range from text manipulation to network protocols to database integration to graphics. A categorized list of modules is also available from CPAN.
モジュールのカテゴリは、テキスト操作からネットワークプロトコル、 データベース統合、グラフィックまで多岐に渡ります。 カテゴリ別モジュールリストも CPAN で利用可能です。
To learn how to install modules you download from CPAN, read perlmodinstall.
CPAN からダウンロードしたモジュールのインストール方法を学ぶには、 perlmodinstall を読んでください。
To learn how to use a particular module, use perldoc Module::Name
. Typically you will want to use Module::Name
, which will then give you access to exported functions or an OO interface to the module.
特定のモジュールの使い方を学ぶには、perldoc Module::Name
を 使ってください。 典型的には use Module::Name
として、それからエクスポートされた 関数か、モジュールへの OO インターフェースにアクセスします。
perlfaq contains questions and answers related to many common tasks, and often provides suggestions for good CPAN modules to use.
perlfaq には多くの一般的なタスクに関する質問と答えがあり、しばしば よい CPAN モジュールの提案が提供されています。
perlmod describes Perl modules in general. perlmodlib lists the modules which came with your Perl installation.
perlmod は一般的な Perl モジュールについて記述しています。 perlmodlib は Perl インストール時に同梱されているモジュールの一覧です。
If you feel the urge to write Perl modules, perlnewmod will give you good advice.
Perl モジュールを作りたいと思ったなら、perlnewmod がよい助言を 与えてくれるでしょう。
作者¶
Kirrily "Skud" Robert <skud@cpan.org>