Perlで、配列に特定の要素が存在することを調べる方法を紹介します。 このエントリーはビギナー向けの内容です。 1.問題点 配列変数fooの要素に"hoge"という文字列があることを調べたいので次のような赤色で示すコードを用意しました。 my @foo = ( "bar", "hoge", "fuga" ); for my $data ( @foo ) { print "OK" if $data eq "hoge"; } このコードでは"hoge"が配列fooに複数存在する場合、"OK"が複数回出力されることになります。 1回だけ出力したい場合は、 for my $data ( @foo ) { if ( $data eq "hoge" ) { print "OK"; last; } } とlastを追加すればいいのですが、もう少し簡単なコードで実装したいところです。 2.配列に要素が存在
Perlの命名規則 Tweet [Perl] amagamiの実装をしていて、ふと考えた疑問は 「Perlに命名規則は無いのかな?」 というものでした。 そこで、研究室内の方にそれとなく質問してみると、一様に 「好きにやれば良い」 との回答をくださったので、好きに名前をつければ良いか・・・と PerlにJavaの命名規則を適応していました。 # 私は以前Javaばかり使っていました。 ところが、PerlにJavaの命名規則を適応してもシックリこないのです。 実装上は別に問題は無いのですが、何だか落ち着きません。 そこで、Perlに有名な命名規則が無いのかを調べました。 調べること数分・・・あっさり見つかりました。 これはPerlの公式ドキュメントですね。 Perl style guide You may find it helpful to use letter case to indic
I'm "Keid". Full-stack Web Engineer. Mainly, about Tips, about Web, about My LIFE. ツイート 日頃のつまらないルーチンワークは全てスクリプト化している俺です。 スクリプトは動的言語であれば気楽にかけるので何でもよいのですが、うちの会社の場合だと、ローカル環境はWindows、商用環境はLinuxなので、どちらでもそれなりに動くPerlをよく使います。 スクリプティングでよくやるのは「ファイルを読み込み→いい感じの処理→ファイルを出力」だと思うので、そこら辺の注意点を忘れないように書いておきます。 1. Perlの文字コード Perlは内部で「内部文字列(flagged utf8)」というUTF-8によくわからないフラグがついた文字コードとして扱います。そのため、外部からの文字列のやり取りには、文字コード変換が
CSS(スタイルシート)のコメントアウト記法 CSSのコメントアウト記法は、 『/* 』から『 */』までがコメントアウトされます 複数行でも『/* 』から『 */』までがコメントアウトされます 特に、一行コメント用の記法は用意されていないようです。 /* ここがコメントアウトされます */ /* 複数行でも コメントアウトされます */ バッチ(bat)、バッチファイル内でのコメントアウト記法 バッチのコメントアウト記法において、 一行コメントの方法は三つ用意されています。 『rem』コマンドを使用するか、『::』から始まる行、『: 』(コロン+半角スペース)から始まる行でも コメントアウトが可能です。 複数行のコメントアウト記法は現時点では用意されていません。 ですので、複数行をコメントアウトするには、行数分のremなりを記述する必要があります。 rem この部分がコメントです ::こ
UTF-8-MAC とは[編集] UTF-8-MAC とは、Mac OS X に付属する iconv にて利用できる文字エンコードの一つで、 Normalization Form D (NFD) で符号化した UTF-8 のことを指します。 一般に UTF-8 とだけいった場合には、Normalization Form C (NFC) でエンコードされたものを意味します。 Unicode 標準では、NFC は正規結合(Canonical Composition)、 NFD は正規分解(Canonical Decomposition)として規定されています。 たとえば、「が」の字を NFC で表現すると U+304C (HIRAGANA LETTER GA) ですが、 NFD では U+304B U+3099 (HIRAGANA LETTER KA + COMBINING KATAKANA-
Perl › 関数 › here 配列を並べ替えるにはsort関数を使用します。第1引数には比較のためのコードブロックを渡します。昇順で並べ替える場合は$aを$bより先に記述し、降順で並べ替えるには$bを$aより先に記述します。比較演算子には数値として比較したい場合は<=>を使用し、辞書順で比較したい場合はcmpを使用します。コードブロックの直後にカンマがないことに注意してください。 # 昇順で並べ替え @sorted = sort { $a 演算子 $b } @array; # 降順で並べ替え @sorted = sort { $b 演算子 $a } @array; 並び替えのサンプル 数値の昇順で並べ替えるサンプルです。@numsは(2, 3, 5, 11)になります。 # 数値の昇順で並び替え my @nums = (5, 11, 3, 2); @nums = sort {$a <=
これまで筆者が Apple Script で正規表現による文字列の置換を行いたい時は、わざわざ置換用の Perl スクリプトを書いて ハードディスク内に保存し Apple Script から do shell script で呼び出すか、もしくは Apple Script を「スクリプトバンドル形式(拡張子 .scptd)にして Perl スクリプトをバンドルするか、どちらかの方法をとっていた。 だが、可能ならそのような方法ではなく、Apple Script 内だけで Perl による正規表現置換を行いたいと思い立ち、方法を模索した。 以下、当記事内では 置換処理の対象となるテキストを 「対象テキスト」(変数 obj_text) その中で置換されるべき(置換後に消えるはずの)文字列を 「検索文字列」(search_str) 置換目的の(置換後に現れているはずの)文字列を 「置換文字列」(r
「.*」や「.+」を使うと、限りなく連続した文字を表します。 これは非常に便利なのですが、予想以上に長くマッチして、思ったように動かないことがあります。 これを解決するためには「?」を付加して最短一致するように仕向ける方法があります。 また、ここで説明する「?」は「直前の文字の0回または1回に一致」とは違います。 文字は同じですが、まったくの別物です。(記述する位置で見分けてください。) たとえば、HTMLのタグを消す場合、このように書いたとします。(Perlの置換文法) s/<.+>//g これでタグは消えるのですが、タグだけではなく、タグに挟まれた間の文字まで消してしまいます。(下線部分) <P>abc</P> 理由は最長一致モードで動作しているからです。 動作をみると、途中に「>」が出てきているのですが、そこでは止まらず、最後の「>」までマッチしていま
./hist.pl [file] (-k column) (-d bin size) (-r min_max)
Perl › 演算子 › here ヒアドキュメントを用いれば複数の文字列をわかりやすく記述することができます。 my $text = <<'EOS'; aaaa iiii uuuu EOS ヒアドキュメントを用いれば、<<'EOS' と EOS にはさまれた行にある文字列を、改行を維持して文字列に代入することができます。 セミコロンの位置に注意しましょう。最後のEOSのあとには、セミコロンはなくて、 最初の行の最後にセミコロンがあります。 EOSという部分は任意の文字列で構いません。このサンプルでは「End Of String」という意味でEOSを使っています。 ヒアドキュメントの中で変数展開する <<'EOS' を <<"EOS" に変更すれば、ヒアドキュメントの中で、変数展開が可能になります。 my $message = 'Hello'; # 変数展開可能なヒアドキュメント my $
PerlIO レイヤを使用する方法 v5.8.0 から、標準機能として PerlIO レイヤが perl に盛り込まれました。 PerlIO レイヤとは、入出力の際にフォーマットを変換するためのフィルターの役割をする機能のことです。 例えば、あるファイルを開くときに文字コードを指定して、読み込み時に自動的に内部形式に変換する、というようなことができます。 この機能を使えば、入力ファイルの文字コードを UTF-8 とし、出力ファイルの文字コードを Shift_JIS と指定しておくだけで、入力ファイルから読み込み出力ファイルに書き出すだけで自動的に文字コードの変換ができちゃいます。 どういうときに使えるのか PerlIO レイヤは、入出力時にフォーマットを変換するものです。 よって変数に入っている文字列 (オクテットストリング) の文字コードを変換する、という使い方ではなく、ファイルの読み書
Kawa.netxp [Perl] XML::TreePP/Pure Perl実装によるXMLファイル展開モジュール XML::TreePP モジュールは、 XML ファイルを解析してツリー構造の多次元変数(ハッシュ/配列)に展開します。 XML テキストと Perl オブジェクト(ハッシュ&配列)間の相互変換が可能です。 コンパイル不要の Pure Perl 実装モジュールなので、 プロバイダのレンタルサーバ環境でも .pm ファイル単体のコピーのみで手軽に利用できます。 (Ajax で利用する JavaScript の XMLHttpRequest オブジェクトのように) サーバからの XML ファイルのダウンロード処理にも対応しています。 安定版アーカイブ: XML-TreePP-0.41.tar.gz TARGZ CPAN ←通常パッケージ 最新版ソースファイル: lib/XML/
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く