Hatena::Grouparaistudy

iwasekiの日記

2006-10-27

[]複数の文字列をor条件でgrepする はてなブックマーク - 複数の文字列をor条件でgrepする - iwasekiの日記

知らなかったことメモ

grepコマンドオプション-eの便利な使い方。手元にあるコマンドリファレンスだと

-から始まるパターンを指定したいときに使用する

と書いてあった。これを使ってタイトルのとおりのことができる。|(パイプ)だとandで出力しちゃうからね。


文字列「hoge」含む行と文字列「moge」を含む行の両方をhogehoge.txtから抜き出す
grep -e hoge -e moge hogehoge.txt

参考:お探しのページが見つかりません - 東京大学生産技術研究所


UNIXコマンドポケットリファレンス ビギナー編 (Pocket reference)

UNIXコマンドポケットリファレンス ビギナー編 (Pocket reference)

MaibamMaibam2013/03/18 23:33Superb information here, ol'e chap; keep burning the mindghit oil.

cslfjcexcslfjcex2013/03/22 03:37cuqj6I , [url=http://shdosyyxxdro.com/]shdosyyxxdro[/url], [link=http://uizphhsjfuql.com/]uizphhsjfuql[/link], http://whinougxzgsd.com/

kvujhvwrkvujhvwr2013/03/22 03:37P4xLaZ , [url=http://nwgvqikzkatg.com/]nwgvqikzkatg[/url], [link=http://iajufffayyig.com/]iajufffayyig[/link], http://ppswbcimlace.com/

2006-10-23

[]4章 サブルーチン(その3) はてなブックマーク - 4章 サブルーチン(その3) - iwasekiの日記

引数

ブルーチンに値を渡すために引数を使える。戻り値の時のコードを書き換えてみる。

#!/usr/bin/perl -w

$out = &add(10, 15); #10と15を引数としてサブルーチンに渡す
print "$out\n";

sub add{
	my($x, $y) = @_; #引数をプライベート変数に渡す
	$x + $y; #加算結果をメインルーチンに返す
}

25

local演算子

「"local"じゃなくて"save"にすればよかった」だってさ。まとめるとこういうことでいいのかな。

  1. localは指定されたグローバル変数の値をスタックに入れる
  2. ブルーチンの中で変数として利用する
  3. メインルーチンに戻る時に変数の値は元に戻る

・・・リャマ本によると、「おとなしくmyを使っとけ、けどlocal使ってるコードをむやみに書き換えると危険よ?」だって。

まぁ当たり前っちゃ当たり前だ。

2006-10-22

[perl]4章 サブルーチン(その2)

戻り値

全てのサブルーチンは、実行の過程で、その動作の一部として値を計算していきます。そして、サブルーチンの中で最後に行われた計算の結果が、自動的に戻り値になるのです。

・・・ほうほう。さっそく実験

#!/usr/bin/perl -w

$n = 1;
$m = 2;

$out = &sub_test;
print "$out\n";

sub sub_test{
print "ちゃんとサブルーチンを通過しました\n";
$n + $m;
}
ちゃんとサブルーチンを通過しました
3

ここまではよし。で、サブルーチンの最後にprint文を追加してみると

#!/usr/bin/perl -w

$n = 1;
$m = 2;

$out = &sub_test;
print "$out\n";

sub sub_test{
print "ちゃんとサブルーチンを通過しました\n";
$n + $m;
print "お邪魔虫!\n";
}
Useless use of addition (+) in void context at ./sabu_test2.pl line 11.
ちゃんとサブルーチンを通過しました
お邪魔虫!
1

最後のお邪魔虫なprint文が戻り値になるので、Perlが警告(無効コンテキストvoid context)を表示してる。

警告メッセージは「無効コンテキストで加算を行っていも意味が無い」だそうな。

ポイントは、戻り値になるのは最後に評価された式であって、最後の行にある式ではないということ。

2006-10-21

[]4章 サブルーチン(その1) はてなブックマーク - 4章 サブルーチン(その1) - iwasekiの日記

ブルーチンの基本

ともかく書いてみます。

#!/usr/bin/perl -w

#メイン(ただサブルーチンを呼び出してるだけ)

$n = 1;

&sub_test;
&sub_test;
&sub_test;
&sub_test;

# "sub"キーワードを使ってサブルーチンを定義する。この時&は付けない。
sub sub_test{
	$n += 1;
	print "Hello, Number $n!\n";
}
Hello, Number 2!
Hello, Number 3!
Hello, Number 4!
Hello, Number 5!

メイン処理の最初に$nに1を代入して、それをサブルーチン内で呼んでいます。

どうでもいいけど、

ブルーチンを起動する(invoke)ことを、「サブルーチンを呼び出す(call)」ということがあります

T.M.Revolutionの曲のタイトルはここからきたんだな、と思った時点でどう見てもガノタです。本当に(ry

2006-10-20

[]3章 リスト配列(その9) はてなブックマーク - 3章 リストと配列(その9) - iwasekiの日記

練習問題

1.と3.は問題なし。2.でちょっと引っかかった。

@nameリストプログラム中に保持して、入力された数に対応する名前を出力する。

#!/usr/bin/perl -w

@name = qw/fred betty barney dino wilma pebbles bamm-bamm/;

print "1~7までの値を入力してください\n";
@number = <STDIN>;
chomp @number;

foreach (@number){
	print "$name[$_ - 1]\n";
}

1、2、4、2と入力されればfred betty dino bettyと出力されるはずだったが、

1つずつずれて表示された。ミスったのはprintのところで-1をしていなかったという凡ミスorz

2006-10-19

[]30分ぐらい時間があれば読んでみて はてなブックマーク - 30分ぐらい時間があれば読んでみて - iwasekiの日記

【500ポイント】視点の教育方法について教えて下さい。 PCの使い… - 人力検索はてな

質問者意見回答者の言いたいこともわかる。

だけど、オレは質問者の悩みにものすごく共感します。

czk-htnczk-htn2006/10/22 17:58姿勢や価値観の違いかと。単純な回答はないですね。
「なぜ自国の政治に興味を持たないのか」と読み替えてみるとおもしろいかも。

2006-10-18

[]GTDのススメ はてなブックマーク - GTDのススメ - iwasekiの日記

GTDを使っていて思うこと

  • 最初は正直胡散くs(ry
    • けど、一度身につくと手放せない
    • 自然とGTDな考え方になる
  • 使うツールはなんでもいい
  • 頭の中すっきり
  • 自分のやらなきゃいけないことが全て見える
  • 次に何をやるか・やらなきゃいけないかがわかる
  • 仕事仕事の間の数分に「この間に別のタスクをやっちゃおう」みたいなことができるようになる
    • 前の仕事と後の仕事を忘れない・影響を出さない
  • 結果的に仕事が回る・早くなる

言いたいこととしては、だまされたと思って1ヶ月ぐらいみっちりとやってみれってこと。


GTDを実践する上で使っているツール


その他のGTDなトコ

読んだ本

YoshiharaYoshihara2006/10/18 12:47早速の更新、助かります。
とりあえずは「やってみろ」の精神で…

まずはアクションを起こしてみようと思います。

2006-10-13

[]3章 リスト配列(その8) はてなブックマーク - 3章 リストと配列(その8) - iwasekiの日記

リストコンテキストで<STDIN>を使う

@list = <stdin>;

のように書くことで標準入力からリストへ値を入力する。

では、入力し終わった場合はどうするか。リャマ本によると、

Unix/Linux
Ctrl+Dを入力する
DOS/Windows
Ctrl+Zを入力する

だそうです。やってみようやってみよう。

#!/usr/bin/perl -w

chomp (@list = <STDIN>); #行を読み込んで改行文字を除く

print "@list\n";

で、実行して以下のよう入力します。

カツオ
ワカメ
タマ

ここで環境がFedoraCoreなので、Ctrl+Dを入力すると、

カツオ ワカメ タマ

う~ん、だいぶプログラムらしくなってまいりました。

さて、ここで気になるのがchompの書き方。ここでもリャマ本は

@lines = <STDIN>;

chomp(@lines);

しかしたいていの場合、次のような書き方が好まれます:

chomp(@lines = <STDIN>);

自分の部屋でどちらの書き方をしようとも、それはあなたの勝手ですが、ほとんどのPerlプログラマは2番目のコンパクトな書き方を期待しています。

とある。しかしid:czk-htnさんによると、

僕は↓こういうのが多いな。

while(<STDIN>){

chomp;

...hogehoge..

}

今回の場合、リストにただ代入してるだけだけど、id:czk-htnさんの例のようにwhileとかで使う場合はどうなんだろう。

深く考えずに単純な感想を述べるならば、個人的には(できる限り)1行1命令のほうがわかりやすいと思うのです。

2006-10-10

[]3章 リスト配列(その7) はてなブックマーク - 3章 リストと配列(その7) - iwasekiの日記

スカラーコンテキストリストコンテキスト(続き)

スカラーを生成する式をリストコンテキストで使う

こっちは簡単だね。ただ単に1要素のリストに変換されるだけ。

#!/usr/bin/perl -w

@list = 6 * 7;
@hello = "Hello".''."World";

print "@list\n";
print "@hello\n";

結果。

42
HelloWorld

これに関連して、

@list = undef; #undefはスカラー値なので配列の内容をクリアできない
@list = (); #配列の内容をクリアするにはこのように空リストを代入する

なんだそうな。なるほどね。


スカラーコンテキストを強制する

本来リストとして判断される場所でスカラーとして判断させたい場合、擬似関数scalarを使う。

なんじゃ擬似関数って。リャマ本には

scalarは本当の関数ではありません。なぜなら、これは、Perlスカラーコンテキストを提供させるだけだからです

だそうな。いまいちわからん。けど使ってみよう。

#!/usr/bin/perl -w

@list = qw/ sazae masuo tarao namihei hune katuo wakame tama/;

print "サザエさんちの構成は @list です\n";
print "サザエさんちの人数は", scalar @list, "人です\n";
サザエさんちの構成は sazae masuo tarao namihei hune katuo wakame tama です
サザエさんちの人数は8人です

2006-10-09

[]3章 リスト配列(その6) はてなブックマーク - 3章 リストと配列(その6) - iwasekiの日記

スカラーコンテキストリストコンテキスト

ココがリャマ本の中で一番重要なトコらしい。難解ではないけど、頭に叩き込めと書いてある。

ここが、この章で最も大切なセクションです。事実、この本の中で最も重要なセクションだといえるでしょう。

・・・が、がんばります。

コンテキスト(context)
式がどんな場所に置かれているかを示す概念

つまり場所によって、スカラー値なのかリスト値なのか、Perlの解釈が変わるということ。

ともかくやってみます。

#!/usr/bin/perl -w

@list = qw/ sazae katuo wakame masuo tarao namihei hune tama /;

@sorted = sort @list; #リストコンテキストとして処理される
@sum = 5 + @list; #スカラーコンテキストとして処理される

print "ソートの結果は@sortedです\n";
print "合計は@sumです\n";

サザエさんて名作だよね!

ソートの結果はhune katuo masuo namihei sazae tama tarao wakameです
合計は13です

ここまでは理解できた。問題は次。

リストを生成する式をスカラーコンテキストで使う
#!/usr/bin/perl -w

@back = reverse qw/ sazae masuo tarao /;
print "@back\n";
$back = reverse qw/ sazae masuo tarao /;
print "$back\n";

一見、同じ結果になるんじゃないかと思えるこの二つ。

実際の結果はというと、

tarao masuo sazae
oaratousameazas

おもしろ!(リューク

リストと判断するか、スカラーと判断するか、ってことね。

先日学んだこともこの辺の話なわけですな。実感。けど、次が問題です。

$fred = something;			#スカラーコンテキスト
$pebbles = something;			#リストコンテキスト
($whilma, $betty) = something;		#リストコンテキスト
($dino) = something;			#これもリストコンテキスト

あ゛ー!・・・姉さん、事件です(古)

・・・と混乱しかけたけど、無理に覚えなくても予期せぬ結果が出たときはこの辺を疑えばいいんじゃね?

リャマ本にはスカラーで返すかリストコンテキストで返すかの例がたくさん載ってる(p63)ので、変な値がでたらこの辺を確認するってことで。

2006-10-05

[]気をつけましょうね はてなブックマーク - 気をつけましょうね - iwasekiの日記

まさかとは思いますが、Googleカレンダーを使ってる人は気を付けましょう。

大西 宏のマーケティング・エッセンス : 【警告】Googleカレンダーで情報流出?

DonswaggDonswagg2012/04/24 12:58Great hammer of Thor, that is porwefully helpful!

amodhpknhzzamodhpknhzz2012/04/25 17:37BqfmZP , [url=http://twjhfdpahiow.com/]twjhfdpahiow[/url], [link=http://vwonpgqowoln.com/]vwonpgqowoln[/link], http://lpdhcvgzexmb.com/

wrebmldsjcxwrebmldsjcx2012/04/25 23:56mAPkOn <a href="http://cqftcptvjvmz.com/">cqftcptvjvmz</a>

qqzwfkueqqzwfkue2012/04/26 23:5223cRQt , [url=http://skynfpfonbam.com/]skynfpfonbam[/url], [link=http://yatxwcasdqal.com/]yatxwcasdqal[/link], http://kjwwqjktpriv.com/

2006-10-04

[][]2つのprint文の出力結果に違いがでる はてなブックマーク - 2つのprint文の出力結果に違いがでる - iwasekiの日記

#!/usr/bin/perl -w

@list = (1..5);

print @list;
print "\n";

print "@list\n";

結果

12345
1 2 3 4 5

なんで実行結果が違うの?ってことを調べたわけですが。

結局id:czk-htnさんにお伺いを立てたところ、

配列変数は、ダブルクォート文字列中で、配列のすべての要素を変数 <$``> (Englishでは $LIST_SEPARATOR) 中に示す区切り文字(デフォルトはスペース) でつなげて展開されます。

perldata - Perl のデータ型

ってことなんだそうな。つまり、

print "@list\n";

の時は区切り文字付で出力されるってことだね。

うーん、難しいところに足を突っ込んじゃった感じ。けど、疑問が解けてすっきりしました。

id:czk-htnさん、ありがとうございました。

参考リンク

google:perl 変数 展開

google:perl $LIST_SEPARATOR

2006-10-03

[]3章 リスト配列(その5) はてなブックマーク - 3章 リストと配列(その5) - iwasekiの日記

Perlお気に入りのデフォルト:$_

foreachで制御変数を省略するとデフォルト変数($_)を勝手に使う。

さらにprint文で何も指定しなければ、勝手に$_の値を表示するんだって!

オレみたいなネーミングセンスのないヤツには大助かり!

#!/usr/bin/perl -w

foreach (1..10){
        print;
        print"\n";
}
1
2
3
4
5
6
7
8
9
10

reverse演算子

値のリストを逆順に並べ替える。引数の値は変更されない。

#!/usr/bin/perl -w

@list = (1..5);
print "@list\n";                #これは普通に表示

@reverse = reverse @list;
print "@reverse\n";             #逆に表示

print "@list\n";                #最初と同じように表示されるはず

狙ったどおりに動くかな。

1 2 3 4 5
5 4 3 2 1
1 2 3 4 5

・・・あれ?・・・いや、結果自体はいいんだけどさ。

なんで数値の間に空白が入ってんの?検証用に組みなおす。

#!/usr/bin/perl -w

@list = (1..5);

print @list;
print "\n";

print "@list\n";

結果

12345
1 2 3 4 5

なーんでやねーん!


sort演算子

値のリストASCIIコード順にソートする。好きな順番に並べ替える方法は15章でやるんだそうな。遠っ!

#!/usr/bin/perl -w

@list = qw/ Banana ichijiku 22222 orange apple 111 Peach strawberry /;
@out = sort @list;
print "@out\n";
111 22222 Banana Peach apple ichijiku orange strawberry

2006-10-02

[]3章 リスト配列(その4) はてなブックマーク - 3章 リストと配列(その4) - iwasekiの日記

foreach制御構造

forやwhileのようにループをするもの。配列を使ってループを実現する。

#!/usr/bin/perl -w

foreach $huguta (qw/ masuo sazae tarao /){
        print "My name is $huguta.\n";
}

ネーミングがめんどくさくなっているのが手に取るようです。

My name is masuo.
My name is sazae.
My name is tarao.

ポイントとして、リストから制御変数($huguta)に取出した値はコピーではなく、リストの値そのものであること。

その後のブロックで値に変更を加えれば反映されるわけだ。

#!/usr/bin/perl -w

@list =  qw/ masuo sazae tarao /;       #事前に配列を準備
foreach $huguta (@list){
        $huguta = $huguta."san";
        print "My name is $huguta.\n";
}
My name is masuosan.
My name is sazaesan.
My name is taraosan.

2006-10-01

[]いただいたコメントに返信 はてなブックマーク - いただいたコメントに返信 - iwasekiの日記

特にリアクションしてなかったけど、ちゃんと読んでます。ありがとうございます。

頼りになる先輩方にはいつも感謝してます。

まるごとPerl!

『買ったよ。すごくおもしろいですが、Hello Worldなレベルで読む本じゃないかも(w』

はい、買って帰ってきてから凹みました。

これが理解できるようになるまでがんばる所存。

chomp演算子

『>標準入力とchompを同じ行に書くほうがスタンダード

そうなの?僕は↓こういうのが多いな。

while(<STDIN>){

chomp;

...hogehoge..

}』

えぇー。リャマ本には書いてあったんですけどねぇ。

初めて学ぶ言語なんで、デファクトスタンダードってやつを身につけておきたいんですよねぇ。

個人的には別の行にするほうが読みやすい気がするので、そっちにしておこうかな(優柔不断)。

インデントの話

Perlは聞いたことないけど、僕は「スペース4つ」です。Rubyだと「スペース2つ」かな。

定番エディタモード設定に合わせておけばいいんじゃないですか。

インデントをスペースでやるかタブでやるかは宗教論争ですね。私はあっち(海外)のプログラマがスペース3文字でインデントしてるのを見てとても格好良いと思った。けど業務でそんなことやったら怒られるから、仕事では普通にタブでインデントしてます。

これも上のと一緒で、デファクトスタンダードが知りたかったのです。

とりあえずはタブでやることにしておきます。

はてなアイデアミーティング

聞いたよ。アッという間だったねぇ。

他のやつはいじり・いじられがあったりするのにねorz

shift演算子とunshift演算子

『shiftとpushは激しく使う。unshift,popはあまり使わないな、foreachで取り出すことの方が多いからか。エロい人のコードにはunshiftありまくりだけど。』

エロい人はunshiftを使う理由ってなんなんでしょう。自分でコード読んでみろってことですね、はい、すいません。