- 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 あたり
- 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を第一選択とするのが吉だと思うが。
- 250 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 17:58:02 ]
- >>249
>んで、それらの用途にシェル使わない人もいると思うが何かデメリットでもあるのか? 同じことができるならそれでいい。 ただし、より面倒臭くなることはあるだろう。 何も難しくないワンライナーでできることに他の物使うとか、そういうのは単なるアホだろ。
- 251 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 18:06:37 ]
- トリッキーなことしなくても普通にシェルでできるなら、それが一番簡単なんじゃね?
コマンド並べれば動くから 難しいナンチャラ理論やらウンタラ指向やらも考えなくて済む プログラマでないエンドユーザや管理者にも使えるのは大きなメリットだと思うな
- 252 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 18:07:23 ]
- >>250
要するに余計面倒な時だけsh使うでもいいわけね。 >>244はとてもそういう論調には見えないけど。 そういう俺はよくshスクリプト書くがな。
- 253 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 18:10:49 ]
- >>252
w3m -dump www.media-k.co.jp/jiten/wiki.cgi?%A1%E3%B4%E9%CA%B8%BB%FA%A1%A6%A3%C1%A3%C1%A1%E4 | grep '´_'
- 254 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 18:11:49 ]
- >>250
> 何も難しくないワンライナーでできることに他の物使うとか、そういうのは単なるアホだろ。 Perlプログラミングに没頭してる合間とかだったら、AWKの方が少々短くても Perlのワンライナーを選択することはあるな。 短く書けるっつったってせいぜい数バイトだろ>>228。頭切り替える方が面倒だわ。
- 255 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 18:13:28 ]
- >>254
Perlに没頭してるあなたにとってはPerlでやるほうが簡単なんでしょうね 別にそれはそれでいいのでは? だからといって、それはあなた個人の特殊事情で簡単に感じるだけなのだから、 シェルでやるほうが手間が少ない人にまで強要すべきことではないでしょう
- 256 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 18:15:10 ]
- >>255
いつ強要したんだよww俺はこうだって言っただけじゃん。 逆に>>244なんかshで出来ることにPerl使う奴は外道みたいな書き方じゃん。
- 257 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 18:17:24 ]
- この人論点が分かってないからトンチンカンな事を言うのかね。
「何事もshが第一選択にするのが普通、じゃなきゃ外道」 みたいな主張がおかしいと言ってるだけなんだが。
- 258 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 18:22:07 ]
- >>257
話がかみ合わない理由って案外簡単なんじゃない? 普通にUNIX系OS使ってる人にとってshって標準的な道具だから、 シェルで作業するってのは鉛筆で文字を書くのと同じくらい簡単で当たり前なんだよ。 だから、どうしても他の物を試す前にshで、っていう発想になるだけでしょ。
- 259 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 19:01:03 ]
- いったい、シェルの話をしているのかシェルスクリプトの話をしているのか
はっきりさせてくれ。
- 260 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 19:09:12 ]
- つーかPerlの話しようぜ
- 261 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 19:20:03 ]
- >>259-260の流れわろた
- 262 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 19:41:35 ]
- この現代に、WEBアプリ以外に何があるの?
世界じゅうどこを見て回っても、WEBアプリしか無いんだから awk も sh もいらん。perl しか選択の道は無いだろ。
- 263 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 19:43:50 ]
- 最近の家庭電化製品はマイコン内臓でずいぶん賢くなった。
しゃべる電子レンジのファームウエアを awk や sh で書けると思ってんの?
- 264 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 19:56:31 ]
- 宗教の勧誘みたいw
- 265 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:00:33 ]
- shのほうが慣れてるからsh使うという人が、昔は多かった。
イマドキのPerlerには、Perlのワンライナーのほうが慣れてる人が多いんだろうね。
- 266 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:06:24 ]
- >>265
perlの人は ls と打たずに opendir(DIR,'.'); @file = sort readdir(DIR); foreach(@file){ $time = localtime ((stat($_))[9]); print "$time"."\t"."$_\n"; } closedir(DIR); とやるわけですね? 簡単なことをいちいち perl ふがほげ perl うんたらかんたら ってやるのは不自然なんですけど
- 267 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:10:37 ]
- lsで済むことならlsじゃねえの普通
Windowsユーザならlsなんぞ打たずにファイラとかエクスプローラだろうしな でも、スクリプトの話じゃなかったのか
- 268 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:13:40 ]
- ファイルの行数調べるのも「Perlでどうやろうか」とか考えちゃうのね
cat hoge | wc -l とせずに
- 269 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:14:54 ]
- そこは
wc -l <hoge catとか使わないな
- 270 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:15:05 ]
- >>267
シェルとシェルスクリプトに何の違いがあんの? コマンドが単発か複数かの違いだけじゃん?
- 271 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:15:32 ]
- ファイルに記述するか
その場でうちこんで終わりかの違いじゃね
- 272 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:17:15 ]
- シェル言語の有用性認めないなら
シェル言語使わなけりゃいいじゃん そこまで言うならPerlだけで暮らせ
- 273 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:18:57 ]
- bashのコマンド使わないでperlだけで暮らしたらさぞ便利だろうねw
- 274 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:23:47 ]
- Windowsユーザの9割はbashなんて使ってないけどね
- 275 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:26:16 ]
- >>274
この話ではWinユーザは無関係と思われ UNIXの操作ではシェルが母国語みたいなもんなのに 簡単な用事でも外国語使いたがる変人だけが対象
- 276 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:30:51 ]
- それって、いもしないキャラを作り上げてない?
- 277 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:40:09 ]
- awk '/UNIX/ || /Linux/' hoge
perl -ne 'print if /UNIX/ || /Linux/' hoge シェルを普通に使いこなしてる人なら最初の方が明らかに簡単だろ? 打鍵数だけじゃなく、構文的にも。 「何でもPerl」ってやりかたが変だってのは、そういうこと。 shは古い、awkやgrepは低機能だと文句言いながら、より難しくやってる人たちを変だと言ってるだけさ。 で、シェルとシェルスクリプトをやたらに区別したがってる奴がいるが、本質は同じだろ。 シェル使って作業して、コマンドを複数使って仕事しようとすると、シェルスクリプトと言われるだけで。
- 278 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:04:33 ]
- >>277
その例なら grep '(UNIX|LINUX)' hoge かなあ awkなんて使わないよ
- 279 名前: ◆TWARamEjuA mailto:sage [2009/03/09(月) 21:09:44 BE:1960463-BRZ(10000)]
- my @textfiles = grep /txt$/, qx|ls -l|;
でもえぇやん。。。
- 280 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:13:16 ]
- >>278
環境によって動かないとおもいまつ GNU grep 2.5.3 では少なくとも× grep -e UNIX -e Linux hoge これなら動きます ただし、awk使うのと難しさに大差ありません
- 281 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:15:29 ]
- 例を挙げれば挙げるほど
Perlより簡単な方法が出てくる件
- 282 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:21:06 ]
- >>280
ありゃ egrepならいいのかな?
- 283 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:21:44 ]
- >>282
そうでつね
- 284 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:29:38 ]
- ここまでの流れを見た率直な感想
Bシェルとかgrepとかawkとかsedなんて前時代の遺物だと思ってたけど・・・ 今でも十分に使えんじゃん
- 285 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:45:28 ]
- 結局どうやるのがもっとも効率的かを的確に判断できるように
あらゆるスキルを磨いとけってこった。
- 286 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 22:15:16 ]
- 専用のコマンドの方が使い勝手がいいのは当然だよね
それでも sed や awk を使うのでは1行で済まない場合は (シェルスクリプト組むような場合は)、Perl の方がシンプルになってくる
- 287 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 22:19:03 ]
- ワンライナーの話をしてるのに
なんでshのコマンドラインとワンライナーを比べるんだか・・・。 ネジ緩んでるの?後者は一応スクリプトだぞ。 コマンドはスクリプトで書くのが大変or不可能なことをするために 存在するんだからwcとか例に持ってくるのは愚の骨頂。
- 288 名前:デフォルトの名無しさん [2009/03/09(月) 23:24:23 ]
- >>286
簡単なことだけならシェルスクリプトの方がシンプルだと思うが >>287 それって自分の首絞めてないか? コマンド単体で強力ならそれを利用したスクリプトも強力なわけで
- 289 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 23:42:01 ]
- >>287
ワンライナーってコマンドラインの延長じゃねーの? 質的な違いなんてねーよ
- 290 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 23:48:37 ]
- 質問です!
Perlとsedとawkとbashはどれがいちばんつおいのですか?
- 291 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 23:57:59 ]
- perlで話題が無いからって、そこまで引っ張ることないだろ(w
- 292 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 00:00:57 ]
- じゃあ無理やり話題作りを。
問:以下のシェルスクリプトをPerlに直しなさい。 #!/bin/sh o=$(echo "$@" | sed 's/ /+/g' | sed 's/ /+/g') w3m "www.google.co.jp/search?hl=ja&q="$o"&meta=lr%3D&aq=f&oq="
- 293 名前:292 mailto:sage [2009/03/10(火) 00:08:22 ]
- ちなみに、
sed 's/ /+/g' | sed 's/ /+/g' の部分は sed 's/[ ]/+g' でも同じですが、 全角スペースと半角スペースを列記すると見た目にわかりにくくなるので、 問題文ではあえて別々に処理しとります。
- 294 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 00:15:36 ]
- sedやw3mがシェルスクリプトの一部だというなら
perlも仲間に入れてあげなよ
- 295 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 00:18:46 ]
- perlだけは絶対入れない。絶対ニダ
- 296 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 00:21:18 ]
- sedとかawkでやると楽な事とperlでやるのが楽な事の境界線を
判断するのは難しいよな
- 297 名前:デフォルトの名無しさん [2009/03/10(火) 01:53:00 ]
- まーあれだ、シェルがどーこーとかほざいてる奴らが言ってるのはどうせbashだろ。
糞linuxごときの標準シェルなんぞどーでもえーわ
- 298 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 06:31:06 ]
- どーでもえーことに熱くなれるっていいネ!!
- 299 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 11:47:12 ]
- Linux板のシェルスクリプトスレはここほど釣れなかった
からといってここに八つ当たりしなくてもねえ。
- 300 名前:デフォルトの名無しさん [2009/03/10(火) 22:07:54 ]
- RSSから指定期間の祝日を取得するスクリプトを書いてる。
ある程度の日付の範囲をもって複数の祝日を取得するときは問題なく動作するんだけど、ある特定の祝日を一つに絞って実行すると上手く動作しない。 printをあちこちかませて調べてるんだけどどうも$keyが上手く取れてない様子。通常はURLが入るんだけどNGの場合はXMLのタグ名がなぜか入ってきてNGになってしまう。 上手く動かすには何が足らないんだろ? use LWP::UserAgent; use XML::Simple; &Holiday ("2009-02-01", "2009-04-01"); # OK &Holiday ("2009-03-20", "2009-03-21"); # NG sub Holiday { my $feed_base = 'www.google.com/calendar/feeds/japanese@holiday.calendar.google.com/public/full'; my $sdate = $_[0]; # この日を含む開始日 my $edate = $_[1]; # この日を含まない終了日 my $query = "start-min=${sdate}&start-max=${edate}"; my $feed_url = $feed_base . '?' . $query; my $ua = LWP::UserAgent->new; my $res = $ua->get( $feed_url ); if( $res->is_success ){ my $xml_parser = XML::Simple->new(); $XML::Simple::PREFERRED_PARSER = 'XML::Parser'; my $holidays_data = $xml_parser->XMLin( $res->content ); foreach my $key ( keys %{ $holidays_data->{ entry } } ){ #print "$key\n"; my $holiday_day = $holidays_data->{ 'entry' }{ "$key" }{ 'gd:when' }{ startTime }; print $holiday_day , "\n"; } }else{ die $res->status_line; } }
|

|