- 1 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 21:17:36 ]
- "The duct tape of the Internet" こと、Perl についての質問箱です。
"There's more than one way to do it" ということで、 Perl の奥深さについて皆で語り合い、追求してまいりましょう。 CGI についての質問は板違いです。WEB プログラミング板でどうぞ。 CGI と Perlの区別がつかない人も WEB プログラミング板に行ってください。 (WEB プログラミング板: pc11.2ch.net/php/) CGI の質問は答えが Perl と全然関係ない話に帰着する場合が 多かったりするので WEB プログラミング板に行って聞いたほうが得ですよ。 このスレでは(CGI 以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。 スレ違いの質問にはスルーか、速やかな誘導をお願いします。 www.perl.org/get.html ● 2009/02/09 現在の最新版: 5.10.0 ▼ 前スレ Perlについての質問箱 38箱目 pc11.2ch.net/test/read.cgi/tech/1221967332/ リンク集は >>2-3 Perl 日本語処理の基礎の基礎 >>4 過去スレは >>5-6 あたり
- 149 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 06:59:30 ]
- ぞっとした
- 150 名前:デフォルトの名無しさん [2009/02/26(木) 09:21:40 ]
- みんなで仲良くねF
- 151 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 10:15:42 ]
- >>147
確かにuse Sort::Fieldsがアクセスするのは"[モジュールの検索パス]/Sort/Fields.pm"(大文字小文字の区別有り)だと思うけど、 なんかファイル名が小文字でperl本体と同居してるとかなってるなら もはやカオスとしか言いようが無い。 CPAN行ってインストールをやり直した方がマシじゃね。 もちろん、使うコマンドは"perl -MCPAN -e shell"で。
- 152 名前:デフォルトの名無しさん [2009/02/26(木) 10:27:07 ]
- sortで出来るかどうかもわからないなら、もはやらくだ本からやり直してもらうしかない。
第三フィールドでソートしたいとかなら配列の配列使えば出来るよ。
- 153 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 10:46:46 ]
- >>151
バカに引っ張られて自分もバカになるなよ。
- 154 名前:デフォルトの名無しさん [2009/02/26(木) 13:04:39 ]
- 正規表現スレとどっちかと思ったんですが、perlで組んでいるので
ひとまずこっちに質問させてください。 XMLっぽいタグを解析してるんですが、 <AAA BBB=CCC> にマッチさせるのに /<.*?>/ と書いています。一応これでマッチするのですが、CCCに例えば <AAA BBB="XXX>=YYY"> のような大小比較式がダブルクオートで囲まれて入っている場合があって、 このときは上の書き方だと <AAA BBB="XXX> にマッチしてしまいます。ダブルクオート内を無視して<〜>にマッチさせる にはどう書けば良いのでしょうか? よろしくお願いします。
- 155 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 13:17:12 ]
- 誰かがゴリゴリ書いてるだろうと想像して傍観。"....\"...."とかは許されるんだっけ?
- 156 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 13:21:26 ]
- XML タグ 正規表現
でググったら変態正規表現がけっこうヒットするな。
- 157 名前:154 mailto:sage [2009/02/26(木) 13:34:51 ]
- ども
- 158 名前:デフォルトの名無しさん [2009/02/26(木) 17:04:37 ]
- 誰もゴリゴリ書かなかったな。
/(<[^>"]*?(?:(?:".*?){2}|)>)/
- 159 名前:147 mailto:sage [2009/02/26(木) 22:26:27 ]
- >>151
>use Sort::Fields >"[モジュールの検索パス]/Sort/Fields.pm"(大文字小文字の区別有り) やっぱりそうでしたか。 エラーにはperlのインストール環境と思われるパスが出力されました。 >なんかファイル名が小文字でperl本体と同居してる 今日も確認しましたが、小文字でperl本体と同居になっていました。 お客の環境を使っているので、指摘や説明をするのが大変なので諦めます。 有り難うございました。
- 160 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 07:35:19 ]
- 全力でスルーしてたが…
sort.pm, fields.pm => pragma Sort::Fields => 外部モジュール 「人間はタマゴから生まれる」レベルの気違い理論を展開してる事に気付け。
- 161 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 07:40:21 ]
- よくそれで仕事にしてるよな・・・。
- 162 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 07:58:04 ]
- がまんしてスルーして
- 163 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 11:24:32 ]
- Windows 2000 / XPでは$SIG{'QUIT'}を設定することで、Windowsのシャットダウン時に
終了処理ができたんですが、Vistaでは終了処理が実行されずに、問答無用で停止し ているようです。Vistaで終了処理を実行するヒント等、ありますでしょうか? ActivePerl 1004で、以下のようなスクリプトでテストしています。 $SIG{INT} = $SIG{HUP} = $SIG{TERM} = $SIG{KILL} = $SIG{QUIT} = sub { # 終了処理 } while (1){ print "a"; sleep 1; }
- 164 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 17:07:51 ]
- ループでひとつの配列を使いまわしているのですが、次のループ時も前のループのときの配列のデータが残っていて都合が悪いです
配列を空っぽにする方法はありますか?
- 165 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 17:13:02 ]
- >>164
@a = ();
- 166 名前:164 mailto:sage [2009/02/27(金) 17:31:23 ]
- ありがとうございました
うまく空っぽにすることができました
- 167 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 17:35:31 ]
- >>166
できれば仕組みも理解してね。応用利くから。
- 168 名前:デフォルトの名無しさん [2009/02/28(土) 23:31:59 ]
- 複数のテキストファイルから1行目だけを抜き出すスクリプトって
かけないでしょうか。
- 169 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 23:37:29 ]
- >>168
#!/usr/bin/perl foreach my $fn (@ARGV){ open my $fp, "<", $fn; print scalar(<$fp>); }
- 170 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 23:39:31 ]
- >>168
書けるよ
- 171 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 23:43:38 ]
- >>169が回答出してるのに「書けるよ」と自慢げに一行レスする>>170
- 172 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 00:10:02 ]
- >>168
書けるよ
- 173 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 00:10:14 ]
- >>171
いやん
- 174 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 00:11:00 ]
- ところで、headコマンドつかっちゃダメなの?pure perlでやらなくちゃダメなの?
- 175 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 00:21:22 ]
- >>169
まだ冗長だね。 #!/usr/bin/perl while(<>){ print $_; close(ARGV); }
- 176 名前: ◆TWARamEjuA mailto:sage [2009/03/01(日) 00:30:41 BE:2723055-BRZ(10000)]
- え?
- 177 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 00:40:57 ]
- PERLっていくら学んでも知らない書き方が出てくるな・・w
>>175 close(ARGV)ってclose($ARGV)やclose(@ARGV)とはどう違うん? とりあえず、printの後の$_は省略出来るぜ
- 178 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 00:45:08 ]
- >>175
おお、d>printの後の$_ close(ARGV)はコマンドラインで指定されたファイルのうち今開いてるファイルを閉じる。 次の<>では次のファイルを開く。
- 179 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 00:52:04 ]
- #!/usr/bin/perl -n
print ; close ARGV;
- 180 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 01:17:03 ]
- % perl -ne 'print;close ARGV'
- 181 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 01:23:46 ]
- perl -pe 'close ARGV' *
- 182 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 01:32:22 ]
- perl -pe'close ARGV' *
- 183 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 01:57:48 ]
- head -n 1 -q *
- 184 名前:デフォルトの名無しさん [2009/03/01(日) 08:33:59 ]
- #!/usr/local/bin/radin;
print $musabetsutero;
- 185 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 10:38:53 ]
- >>184
いつのネタだよ。ったく。
- 186 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 10:42:21 ]
- >>181
先にcloseしちゃうからダメじゃん。
- 187 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 11:04:56 ]
- >>186
closeする前に1行分が読み込まれてるから大丈夫。
- 188 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 11:13:47 ]
- >>187
あ、そか。さんくす。
- 189 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 12:05:50 ]
- 日本語でおk
- 190 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 12:12:36 ]
- openで開くファイル名に使えない文字コードってありますか?
Shift-jisでスクリプトを書いていてShift-jisのファイル名でファイルを作成しようとするとエラーは出ないのですがファイルが作成できません 英数字のファイル名だとファイルが作成できます
- 191 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 12:16:16 ]
- >>190
システムがShift-JISのファイル名に対応してなかったら当然作れない。 あと""で囲むとメタ文字が発動するかもな。
- 192 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 12:28:07 ]
- 使用環境はWindows+ActivePer5.10.0lです
$file = "テスト"; open FH, ">$file"; →失敗 open FH, '>$file'; →書き込めるが当然変数展開がされない open FH, ">テスト"; →成功 open FH, '>テスト'; →成功 ファイル名を変数を使わずに直接記述するとうまくいきました 変数に格納されている文字列の形式がおかしいのかな…
- 193 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 12:35:19 ]
- >>192
調べてないけど、2回""で囲ってるからメタ文字が二度発動してるんだと思われ。
- 194 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 12:37:40 ]
- まあ、Shift_JIS文字列はいかなる場合でもメタ文字に気をつけるのが吉。
ダメ文字という言葉は知っておいた方がいい。
- 195 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 13:24:19 ]
- 時々ファイル名にもIOレイヤみたいな仕組みが欲しくなるね。
- 196 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 13:45:53 ]
- ダメ文字の対処法としてメジャーなのが
$a = '十\'; だと思うが、探すのもメンテも面倒だしなんかイラッとくるから、 $a = <<'EOF'; 十 EOF chop($a); とするようにしてる。
- 197 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 13:47:50 ]
- つーかそんな面倒なことしなくてもqwで何とかなるような気がしてきた。
昔はqwなかったからその時の流儀をそのまま使ってる。
- 198 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 13:53:03 ]
- あー久しぶりにこのコード書くなと思ったら、最近はUTF-8でコード書いて出力時変換だな。
連投スマソ
- 199 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 17:07:13 ]
- >>190-198 のような話題を解決するために
>>4のテンプレがあるのにな。
- 200 名前:190 mailto:sage [2009/03/01(日) 19:41:26 ]
- open ">$file";
ならファイルが作成できるんですが、 open ">$file.txt"にするとだめでした 事前に$file .= ".txt"; で文字結合してもだめでした
- 201 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 19:48:27 ]
- file="テスト"なんだよね?
ソースファイルのエンコーディングは何? もしSJISでなければSJISにしてみては?
- 202 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 19:49:52 ]
- ってSJISって書いてあった。すまん
- 203 名前:190 mailto:sage [2009/03/01(日) 19:53:45 ]
- ソースファイルのエンコーディングはSJISです
open ">テスト.txt";はできます 末尾に.txtを文字結合すると書き込めなくなるようです
- 204 名前:190 mailto:sage [2009/03/01(日) 20:00:43 ]
- Dumpしてみたら原因がわかりました
改行コードを含んでいたようです スレ汚し失礼しました
- 205 名前:デフォルトの名無しさん mailto:sage [2009/03/01(日) 22:41:48 BE:1417729695-2BP(192)]
- Perrrrrrrrrrrrrrrrrrrrrrrrrrrrnrrrrrrl
- 206 名前:デフォルトの名無しさん [2009/03/03(火) 13:58:07 ]
- オブジェクト指向の勉強中なんだが…
my(%ch, $i); $i = 0; sub new{ my($pkg, $data) = @_; $ch{$i} = $data; my $self = {obj_num => $i ++}; return bless $self, $pkg; } sub DESTROY{ delete $ch{$_->{obj_num}}; } カプセル化ってこんな感じでいいの? 自分で動かした感じは問題なさそうだけど普通のオブジェクトとアクセサしか使えないだけで同じ動作する?
- 207 名前:1/2 mailto:sage [2009/03/03(火) 17:18:15 ]
- $iがゴニョゴニョとか$_って何よ?とかあるが…それを差し引いて
どのレベルでのカプセル化を言っとるんだ? その例だと、呼出元にて、$obj->{obj_num} = 10 ; とかしてobj_numに 直接代入可能だから、その点ではカプセル化されたとは言えん。 只、編集とか継承とかしない限りにおいて、$ch{$obj->{obj_num}} には アクセス出来ん事だけは確かだ。ゲッタねえし。 インサイドアウトオブジェクトレベルの意味ならば以下に簡単な例。 Hoge2は(恐らく)貴方の目指してた物をインサイドアウトで実現してる。 new時に投入した'hoge'がアクセサを介さず変えられるか?がポイント。 package Hoge; #=== カプセル前 === sub new { bless { data => pop }, shift ; } sub setter { shift->{data} = pop ; return ; } sub getter { shift->{data} } 1; package Hoge2; #=== カプセル後 === use Scalar::Util qw(refaddr) ; my %hash ; sub new { my $obj = bless \do{''}, shift ; $hash{ refaddr $obj } = shift ; $obj ;} sub getter { $hash{ refaddr shift} ; } sub setter { $hash{ refaddr shift} = pop ; return ; } sub DESTROY { delete $hash{ refaddr shift } ; } 1;
- 208 名前:2/2 mailto:sage [2009/03/03(火) 17:18:54 ]
- package main ; #=== 実行 ===
use Data::Dumper ; use Hoge; use Hoge2; my $obj = Hoge->new('hoge') ; print Dumper $obj ; # ほら丸見えだし、 $obj->setter('fuga') ; # 折角セッタでセットしても $obj->{data} = 'bar' ; # カプセル化出来てねえよ。 print $obj->getter . qq{\n} ; # ほらね、変えられちゃった my $obj2 = Hoge2->new('hoge') ; print Dumper $obj2 ; # bless先がdo{ }で弄り様もねえしなあ。 printf "%s\n", $obj2->getter; $obj2->setter('fuga') ; # 専用のセッタを用いて漸く変更可能。 printf "%s\n", $obj2->getter; #Hoge2を以下の様に書いてるサイト(有名所)もあるが、大ポカだから注意! #package Hoge2; #my %hash ; #sub new { my $obj = bless \do{''}, shift ; $hash{ $obj } = shift ; $obj ;} #sub getter { $hash{ shift } ; } #sub setter { $hash{ shift } = pop ; return ; } #sub DESTROY { delete $hash{ shift } ; } #1; 長文失礼
- 209 名前:デフォルトの名無しさん [2009/03/03(火) 19:46:08 ]
- >>207
それそれ、それ完璧 Scalar:Util の refaddr がよく分からんけど、Dumper に見てもらった限りだとオブジェクトごとに固有の数字を割り振ってくれる感じなのかな? とりあえずゲッターとセッター書いたのに、 使わなくても自由に書き換えできるなら書く意味ないじゃんってのが気持ち悪かったから、 それが解消できればよかった $iゴニョゴニョはrefaddrの代わりにオブジェクトごとに固有の数字を割り当てるために使ってたつもり $_はミスです 後でScalar::Utilについては色々詳しく調べてみます、丁寧にありがとう 助かりました
- 210 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 19:05:23 ]
- >>208
どこらへんが大ポカなの?
- 211 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 09:30:59 ]
- ゥーperlーパー
- 212 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 11:27:45 ]
- Perlかわいいよ
- 213 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 01:50:07 ]
- *Hoge::huga = /&hogehoge('hugahuga');
としたときに引数が設定されたメソッドが生えると思います ですが Hoge::huga('hogehoge'); としてもhogehogeは無視されるようです 設定した引数に加えて更に引数を追加する方法は無いでしょうか
- 214 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 04:47:47 ]
- >213
> *Hoge::huga = /&hogehoge('hugahuga'); > としたときに引数が設定されたメソッドが生えると思います 本当? > 設定した引数に加えて更に引数を追加する方法は無いでしょうか *Hoge::huga = sub { hogehoge('hugahuga', @_); };
- 215 名前:デフォルトの名無しさん mailto:sage [2009/03/07(土) 12:31:20 ]
- >>213
つ Sub::Curry
- 216 名前:デフォルトの名無しさん [2009/03/07(土) 13:32:36 ]
- SUPERAntiSpywareでスキャンしていたら、
Adware.Vundo/Variant [ 4 items ] Files C:\PERL\LIB\AUTO\FCNTL\FCNTL.DLL C:\PERL\LIB\AUTO\LIST\UTIL\UTIL.DLL C:\PERL\LIB\AUTO\MIME\BASE64\BASE64.DLL C:\PERL\LIB\AUTO\SOCKET\SOCKET.DLL と検出されていました。 昔、perlをインストールした憶えはあるのですが、入れた経緯は忘れてしまいました。 これって誤検出ですよね? 誰かSUPERAntiSpyware入れてる方で、検出された方いますか?
- 217 名前:デフォルトの名無しさん [2009/03/08(日) 12:29:04 ]
- perlとawkの使い分けってどうするんでしょうか?
perlが使えればawkでできることは全てできる、それはわかってるんです。 でも、awk使う人ってawk単独で使うわけじゃなくてbash,sed,grepなんかも使えるから 結局出来ることに違いはないですよね。 むしろやる内容によってはawkのほうがスッキリ書けますし。 どういった場合にどちらを使えば良いのか教えて下さい。 ※awkは古いからダメとか、ダサいとか、そういうのは抜きにして下さい。 純粋に有用性の観点のみでお願いします。
- 218 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 12:35:53 ]
- 自分が楽だと思う方でいいと思うよ
- 219 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 12:43:15 ]
- >>218
やっぱり楽なほうを選ぶのが賢明ですか。 Windowsだとperl単独のほうが環境を整えやすいでしょうね。 UNIXやLinuxだったら最初から色々入ってるのが普通ですけど。 Cygwinとか入れてよければどちらでも手間は変わらない気がしますけど、 学校や会社のPCなんかだと、何かインストールするのに許可が必要だったりしますし。
- 220 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 12:47:41 ]
- >>217
元awk使いだけど。言語的なメリットはないと思うよ。 Perlはawkの後方互換を目指した言語だからね。awk2perlっつって awkスクリプトをPerlスクリプトに置換するものがあるのは最近の人は知らなさそう。 ちなみにPerlにはawk互換のためだけに作られた機構がいくつかある。 awkのメリットは必ずプリインストールされているから root権限持ってない場合でも必ず動くってとこだけど、 今日びデフォルトでPerlが入らないケースは稀だろうから、 このメリットも失われつつある。 長いことCGIプログラマをやってきたけどPerl覚えてからawkを使う機会は 上記のようなケースを除いてゼロになったな。特にここ10年は全く書いてない。
- 221 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 12:51:19 ]
- >>220
a2pで変換すると長〜いスクリプトに変換してくれますよね。 あれってどうにかならないでしょうか。 あれ見るとawkのほうが簡単じゃん、って思ってしまうんですよ。
- 222 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 12:57:02 ]
- >>221
いやいやa2pは人工知能じゃないし、最適化とかはしないから 長くなるのは仕方ない。 awkはバイナリ扱えないとか(今は知らんけど)文字コード変換が大変とか 色々制約あるし、書くのもPerlの方が楽だよ。
- 223 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 13:06:22 ]
- >>222
>いやいやa2pは人工知能じゃないし、最適化とかはしないから >長くなるのは仕方ない 私もそれはあるだろうなぁ〜、と思ってましたけど、やっぱりそうですか。 >awkはバイナリ扱えないとか(今は知らんけど)文字コード変換が大変とか >色々制約あるし、書くのもPerlの方が楽だよ。 シェルスクリプトでバイナリは扱えますよね。 nkfとかconvmvとか使うと文字コード変換できますね。 でも、やっぱりperlのほうが楽なのですか? もし楽ならperlを学んでみたいなぁ、と思います。
- 224 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 13:13:58 ]
- >>223
でもやっぱりPerlが楽ですね。awkより短く速く書けるよ。
- 225 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 13:23:11 ]
- 何しろLarry Wallがawkの弱点に音を上げて、awkの欠点弱点を
補うべく作られた言語だからね。そもそもは。
- 226 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 14:02:19 ]
- awkはできることが少ない。
でも当たり前だよな。 sedはできることが少ない。 grepはできることが少ない。 wcは、mvは・・・ って、言えばその通りだが、 単独で使うわけじゃないから気にするようなことでもない。 一つで何でもやれるようになんていうLarry Wallがバカなだけ。
- 227 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 14:37:32 ]
- perlとsedの使い分けってどうするんでしょうか?
perlが使えればsedでできることは全てできる、それはわかってるんです。 でも、sed使う人ってsed単独で使うわけじゃなくてbash,awk,grepなんかも使えるから 結局出来ることに違いはないですよね。 むしろやる内容によってはsedのほうがスッキリ書けますし。 どういった場合にどちらを使えば良いのか教えて下さい。 ※sedは古いからダメとか、ダサいとか、そういうのは抜きにして下さい。 純粋に有用性の観点のみでお願いします。
- 228 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 14:56:45 ]
- >>227
perlとperl以外で同じことをやってみれば違いがわかるだろう。 大雑把な傾向として、シェルスクリプトのほうが覚えることが少なく、 簡単なことは簡単にかける。 日本刀があれば包丁は要らないわけではないのと同様、 Perlがあってもsedは必要。 sed 's/nae/moe/g' akiba.txt perl -pe 's/nae/moe/g' < akiba.txt ---------------------------------------------- awk 'BEGIN{FS=","}$2 == $3{print $1}' hoge.csv perl -F',' -alne 'print $F[1] if $F[2] ne $F[3]' hoge.csv でも、ある程度以上の規模のスクリプトを組んだり、 C言語に近いようなことをしたいならPerlを選びましょう。
- 229 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 15:26:42 ]
- >>226
Perl不要論ですか。これは新しい。
- 230 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 15:37:05 ]
- >>228
絶対必要ってわけじゃないだろ。Perlが入ってないマシンいじる 機会があるならともかく。覚えといて損はない程度だと思うが。 日本刀でも料理は出来る。 >>226 インストーラがPerlを要求するご時勢にこんな事言う人がいるとは。 昔はそうやって批判する人もいたけどね。
- 231 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 15:47:58 ]
- >>230
日本刀で料理w そこまでムキになって否定しなくてもいいんでない? 世の中シェルスクリプトはできるけどPerlはできない人なんてゴロゴロいるし、 Perlが出来ても使い捨てスクリプトはシェルスクリプトでやる流儀の人もいる。 どうあがいても完全にシェルスクリプトを駆逐するのは無理だよ。 自動車の優位性をいくら説いても原チャリや自転車はなくならないのと同じでさ。
- 232 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 15:52:30 ]
- >>231
不要とは言ってない。Perlでブートするわけにはいかんだろw ただマの知識として必要かというとPerlで事足りる人もいるだろう。
- 233 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 16:07:30 ]
- >>231
お前こそムキになってPerlは必要ないって言ってるじゃん
- 234 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 16:07:39 ]
- >>232
エンドユーザの立場から一言。 プログラマの方のお考えはごもっともです。 しかし、「高層建築にカンナやカナヅチなんて要らない」的発想が 今日のエンドユーザー・コンピューティングの惨状を招いたのではありませんか? たかだかちょっとした自動化、文書検索、集計程度も自分で書けない人だらけにしてしまったのは 「素人は言語なんて使わなくていい」という発想のせいだと思えるのですが。
- 235 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 16:21:46 ]
- 自分の目的を達成できれば言語なんて何使ったっていいんだよ。
特にスクリプト系言語を使うってことは、大体が小物でしょう? 自分がサッと書けること。これが重要。
- 236 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 16:26:44 ]
- >>234
時代のせいだと思います。 例えば自分はWebプログラミング畑だけど、全てのWebアプリケーションを 全部Cで書くことは納期的にほとんど不可能です。awkでは完成すらしない ものも出てきます。 自分も昔はquick sortくらいは空で書けたけど、Webに足を 突っ込んだ今ではそれすら忘れてしまいました。
- 237 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 16:47:37 ]
- >>236
quicksortなんてlibcに任せときゃいいんですよ。気に病むことでもない。
- 238 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 16:59:13 ]
- >>236
quick sortもできないの? ププ
- 239 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 17:03:17 ]
- >>237
だね。 >>238みたいになんでも自分で作るとたまに間違うことがあるし、 馬鹿馬鹿しいプライドで心がねじ曲がってしまう。
- 240 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 17:17:39 ]
- エンドユーザの立場から一言。
プログラマの方のお考えはごもっともです。 しかし、sortコマンド打つのが簡易で合理的な発想だと思えるのですが。 たかだかちょっとしたソートも自分で書けない人だらけにしてしまったのは 「素人はソートなんてやらなくていい」という発想のせいだと思えるのですが。
- 241 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 17:22:21 ]
- 単純なテキストファイルで単純なソートなら sort(1) でもいいんだろうけど
- 242 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 17:24:54 ]
- FYI
■libcでqsort()を再帰を使って実装してる香具師は怠慢だろ…常識的に考えて d.hatena.ne.jp/n2s/20070421/p1
- 243 名前: ◆TWARamEjuA mailto:sage [2009/03/08(日) 18:49:15 BE:1742944-BRZ(10000)]
- そーっとしといてやれよ。
- 244 名前:デフォルトの名無しさん [2009/03/08(日) 20:19:13 ]
- >>230
シェル言語ってのは地味に需要がある。 MSがUNIX/Linuxへの対抗心むき出しでWindows PowerShellなんぞ作ってるくらいだから。 UNIX/Linuxを普段使ってる人ってのはシェルを対話的に利用するのに慣れている。 だから、さて何か組もうかって時もシェル言語が第一選択になる。 それでダメな時に別の言語を選ぶ。 UNIXの世界ではシェルでできることはシェルで、というのが昔から暗黙の了解なので いきなりPerlやPythonでやろうとするのは、コンピュータの世界にWindowsから入った人くらいだろう。 それは例えて言うなら、自家用車を持ってるのにリムジンをレンタルしてドライブするようなもんだ。
- 245 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 22:44:41 ]
- ワンライナーはsed,awk,sortの方が楽なことが
多いな。例えばいくらオプションでsplitを暗黙 にさせても[]書かされる時点で、$1,$2でいい awkにはかなわない。 もちろんガッツり書くならスクリプト言語。
- 246 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 17:17:27 ]
- >>244
1行目は同意だが、あとはいつの時代の話だよと思うな。 そりゃ配布物配ろうとか思ったらまずshを選択するだろうが、 例えばWebアプリケーション作る時にshを第一選択肢に上げるか? hello world以外は特にsh使う場面って思いつかないんだが。
- 247 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 17:48:50 ]
- >>246
普通にファイル処理やテキスト処理には使うし、 処理を自動化するのにも使うし、 定期的にどっかのサイトにアクセスして、特定の情報だけを記録するとか、 その程度の用途には当たり前に使うと思うが。 本格的なプログラミングか、ワープロとか表計算みたいに出来合いのアプリで済ませるか、 二者択一だったらパソコンライフなんて送れねーよ。 それとも、プログラミングってのはアプリとwebの開発のためだけにあんのか?
- 248 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 17:54:32 ]
- 小規模ならまずシェルで出来ないか考えるよな
- 249 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 17:54:45 ]
- >>247
例外は認めないのかよw 普遍的な事のように書くから変な誤解受けるんだろ。 んで、それらの用途にシェル使わない人もいると思うが何かデメリットでもあるのか? 「UNIXの世界ではふつー」とかじゃ理由にならんだろ。 例えば毎秒起動とかだったらさすがに少々面倒でもshを第一選択とするのが吉だと思うが。
|

|