Perlについての質問箱 21箱目

このエントリーをはてなブックマークに追加
478デフォルトの名無しさん
>>477
>>143のおれのお題を考えてみてくれよ。
文字そのものと「.」「*」「?」「[ ]」しか使わないという条件もつける。
解法のとっかかりでもいい。
479デフォルトの名無しさん:2006/01/09(月) 21:54:20
問題の意味がわからん
日本語でおk
480デフォルトの名無しさん:2006/01/09(月) 22:03:51
>>478
そんなの文字クラス[]にマッチする文字のリストアップだけ出来たら終了じゃね?
[]の中身が空集合でなかったらマッチするの作れるだろ。
[]の中身が空集合だったらその文字クラスごと * や ? で潰せないか確認。
481デフォルトの名無しさん:2006/01/09(月) 22:10:43
>>479
これ以上どう書けばいいのかわからない。

>>480
文字列長は不定だよ。
/^abc$/と/^a.+$/くらいなら全文字列を列挙していけばどこかでひっかかるけど。
482デフォルトの名無しさん:2006/01/09(月) 22:16:08
483デフォルトの名無しさん:2006/01/09(月) 22:25:59
>>482
それを使っても総当たり方式にしかならんでしょ。
484デフォルトの名無しさん:2006/01/09(月) 22:38:07
>>483
総当たりで得た文字列を数えればいいじゃないか。
@both_match = grep $count{$_}++, @regex1, @regex2;
485デフォルトの名無しさん:2006/01/09(月) 22:40:29
CGIなどのウェブプログラミングの勉強に
「初めてのPerl」という本を読んでいます。
続・初めてのperlは専門的な内容とアマゾンのレビューに
書かれているのを見かけたのですが、
次に読む本としてはperlクックブックと続・初めてperlの
どちらが良いでしょうか?
486デフォルトの名無しさん:2006/01/09(月) 22:44:55
>>484
だから文字列は不定長なんだって。
blute forceは使えない。
487デフォルトの名無しさん:2006/01/09(月) 22:49:13
Effective Perlで。
488デフォルトの名無しさん:2006/01/09(月) 22:59:17
>>485
【Perl, CGI】参考書籍 第三版
http://pc8.2ch.net/test/read.cgi/php/1030209573/
489デフォルトの名無しさん:2006/01/09(月) 23:17:53
>>488
すれ違いでしたか、すいません
490デフォルトの名無しさん:2006/01/10(火) 08:55:04
アッー!
491デフォルトの名無しさん:2006/01/10(火) 09:24:05
エッ?!
492デフォルトの名無しさん:2006/01/10(火) 09:55:05
>>486
もしどちらの正規表現にもマッチする文字列があるなら、
その最短のものの長さには上限がありそうだから、
うまいことそれを証明すればあとは総当りでOKなんじゃ
ないか、と考えてみた。
493デフォルトの名無しさん:2006/01/10(火) 12:00:39
open関数でパイプや意図しないファイルをオープンされるのを防ぐには
サニタイズするのは当然ですがsysopenを使った方がいいのでしょうか。
494デフォルトの名無しさん:2006/01/10(火) 12:21:36
>>493
「>」や「<」とファイル名はopenでも別々の引数にできる

例:
open FH, '>', $file

ので、こう書けば$fileについてはsysopenと同等。
495デフォルトの名無しさん:2006/01/10(火) 12:23:26
sysopenだから安全とは・・
496デフォルトの名無しさん:2006/01/10(火) 12:38:12
IO::File 使えばイイんじゃね。
497デフォルトの名無しさん:2006/01/10(火) 13:03:47
>>492
regex-A: ^(aaa)+$
regex-B: ^(aaaa)+$

どっか移動するスレ無いだろうか
498デフォルトの名無しさん:2006/01/10(火) 13:53:42
ちょっと教えてください
こんなテキストがあって(一行)

foo('a','b'); foo('c','d'); foo('e','f'); foo('g','h');

このfooの第一引数、つまりa, c, e, gを抜き出して処理したいのですが(引数は2つ固定)、
こういう場合どうするのが定石でしょうか
よろしくお願いします。
499デフォルトの名無しさん:2006/01/10(火) 14:02:13
日本語でおk
500デフォルトの名無しさん:2006/01/10(火) 14:10:45
>>498
正規表現を使うのが定石
$line = q|foo('a','b'); foo('c','d'); foo('e','f'); foo('g','h');|;
@aceg = ($line =~ /\bfoo\('([^']*)'/g);
501デフォルトの名無しさん:2006/01/10(火) 14:12:06
>>498
それが書き捨てかどうかによるが、
書き捨てなら漏れなら>>500よりももっと簡潔にこう書く
@args = $line =~ /\('(.*?)'/g;
502デフォルトの名無しさん:2006/01/10(火) 14:29:13
>>500>>501 さん

ありがとうございます。かなり書き捨てなのですが両方ともども参考にさせていただきます!
どもでした。
503デフォルトの名無しさん:2006/01/10(火) 15:06:43
>>494
引数3つにすると、use open ':encoding(hoge)';が使えねー。
504デフォルトの名無しさん:2006/01/10(火) 17:41:14
webprogのスレどうにかしてくれ
505デフォルトの名無しさん:2006/01/10(火) 18:08:54
>>504
板全体のレベルがアレなので、華麗にスルー。これ。
506デフォルトの名無しさん:2006/01/10(火) 22:00:44
以下のような処理をしています。@all_lineの各行に「aaa」「bbb」「ccc」と
いう文字が含まれている、あるいは行頭に「ddd」がある、と言う場合は'NG'と
判定します。

foreach(@all_line) {
 $line_ok_ng = '';#OKかNGか
 if ((/aaa/)||(/bbb/)||(/ccc/)||(/^ddd/)){
  $line_ok_ng = 'NG';
 }else{
  $line_ok_ng = 'OK';
 }
 #$line_ok_ngに沿って処理
}

しかし、条件が増えてきた為、aaa bbb ccc等の条件を他のファイルに
書き出す必要が出てきました。そこで次のように変更しました。
507506:2006/01/10(火) 22:01:39
つづき
foreach(@all_line) {
 $line_ok_ng = &line_check($_);
 #$line_ok_ngに沿って処理
}

sub line_check {
my $line_ok_ng = 'OK'; #始めはOK
my $each_line = $_[0]; #調査対象
my @ng_word = @other_file::ng_word;
my @ng_header = @other_file::ng_header;
foreach (@ng_word) {
$line_ok_ng = 'NG' if $each_line =~ /$_/;
}
foreach (@ng_header) {
$line_ok_ng = 'NG' if $each_line =~ /^$_/;
}
return($line_ok_ng);
}
#other_fileの中に@ng_word=("aaa", "bbb", "ccc")が記入してあります

やりたいことは実現出来たのですが、微妙に遅くなった気がします。
@all_lineは1万行弱なので、特に困りはしないのですが、上記のことを
もっと綺麗に実現するような方法、あるいは私が覚えておいた方が
良いような手法がありましたら、ぜひ御示唆いただけないでしょうか。
よろしくお願いします。
508デフォルトの名無しさん:2006/01/10(火) 22:11:04
509 ◆TWARamEjuA :2006/01/10(火) 22:32:49 BE:6861479-
Rock54もそこがネックなのよね(哀)@NGワードの正規表現による多重検索
510デフォルトの名無しさん:2006/01/10(火) 22:46:55
>>507
>>508 が順等な答え。

で、わざわざ /$_/ と /^$_/ を分けるんじゃなくて、
^ddd
なものも、aaa, bbb, ccc と一緒に入れて大丈夫。
できればファイル中では ^ddd を先に持ってきた方が良いかも。

他にはファイルに入れたパターンを join して、evalする方法もある。
511506:2006/01/10(火) 23:48:53
>>508さん、>>510さん、ありがとうございます。
qrとかmapとか\bとか、いろいろ勉強になりました。
mapの部分とかが時間がかかるのならば、サブルーチンの中に入れるよりも、
一番最初にグローバル変数として作っておくべきですかね。あとnextで
抜けるのも忘れていました。^dddを一緒に、というのは明日職場でやってみます。
またよろしくお願いします。
512デフォルトの名無しさん:2006/01/11(水) 00:51:09
Perlで作ったプログラムの二重起動を防止する方法を
考えているのですが良い方法が思いつきません。
何か良い方法ありませんでしょうか?
513デフォルトの名無しさん:2006/01/11(水) 01:07:00
>>512
UN*Xなら/var/runに<script_name>.pidファイルを置くのが常套手段。
起動時にvar/run/<script_name>.pidを検索しあったら起動しない。
丁寧にやるなら多重起動につき起動キャンセルの旨のログを
cronやほかのprogramから起動時はログに吐く
コマンドラインから起動されたらSTDOUTにもアラートを吐かせる。

winはどうやるのかなあ?
514デフォルトの名無しさん:2006/01/11(水) 01:13:08
515デフォルトの名無しさん:2006/01/11(水) 11:45:15
perl -vで何も表示されないのはインストール失敗ですか?
516デフォルトの名無しさん:2006/01/11(水) 12:02:31
>>512
#!/usr/bin/perl
use strict;
use warnings;
use IO::File;
use Fcntl qw(:flock);
my $lock_f= $ENV{SCRIPT_NAME} || $0 || '/tmp/lock';
my $lock= new IO::File($lock_f,'+<') || die("$lock_f:$!");
flock($lock,LOCK_EX|LOCK_NB) ||die($!);
# 適当に処理
517デフォルトの名無しさん:2006/01/11(水) 12:20:32
すいません、マジわかんないんですけど
http://www.site-cooler.com/kwl/perl/environment.htm#helloworld
のサイトの通りwindowsのmsiファイルをダウンロードしてインストール
したんですけどコマンドプロンプトでperl -vと入力してもエラーになるし
.plファイルを実行しても一瞬で消えてしまうんですけど
何かインストールの仕方に問題があったのでしょうか?
機種はxpです
518デフォルトの名無しさん:2006/01/11(水) 12:24:33
webprog辺りでやってくれるとありがたいのだが
エラーメッセージくらい書けよ
519デフォルトの名無しさん:2006/01/11(水) 12:31:07
すいません、再起動したら上手くいきました。
環境変数いじったときだけ再起動するのかと思ってました。
スレ汚しすいません。
520デフォルトの名無しさん:2006/01/11(水) 23:28:10
すみません、cygwinのスレで質問しましたが
相手にされませんでした。

ここで質問させてください。

perlのリャマ本で、以下の文がありました。

open passwd, "/etc/passwd"
   or die "How did you get logged in ? ($!)";

while (<passwd>) {
  chomp;
  if (/^adminidtrator/i) {
     print "iroiro!";
   }

}

Unixのかわりにcygwinで実行したら、
die 以下が実行されました。

なんで、passwdが開けないのですか?
宜しくお願いします。
521デフォルトの名無しさん:2006/01/11(水) 23:53:43
CygwinのPerlを実行しているつもりが、実は
ActivePerlを実行しているとか
522デフォルトの名無しさん:2006/01/12(木) 00:18:32
>>520
何の為にエラーメッセージを表示しているんだ?
http://search.cpan.org/~nwclark/perl-5.8.7/pod/perlvar.pod#OS_ERROR
523デフォルトの名無しさん:2006/01/12(木) 00:33:22
CGI を書くときには 有名なとほほさんの http://www.tohoho-web.com/cgi/wwwperl.txt のように
環境変数を直接読むのが普通です。
ただ、近頃は、CGI.pm を使うの方法も増えているようです。
でも、聞いた話によると、CGI,pmを読み込む分、環境変数を直接扱うより遅くなるそうですし、
使えない環境もあるそうです。
なんか、CGI.pmのマニュアル見ても難しそうだし、結局、CGI.pmを使うメリットというのは何なのでしょう?
524デフォルトの名無しさん:2006/01/12(木) 00:43:39
有名なって…

目を覆いたくなるような悲惨なスクリプトだな。
525デフォルトの名無しさん:2006/01/12(木) 00:46:04
開いた瞬間に拒絶反応起こしたwwwww
526デフォルトの名無しさん:2006/01/12(木) 00:56:52
とほほさんより有名なサイトを作れない雑魚どもは黙れ
527デフォルトの名無しさん:2006/01/12(木) 01:06:26
528523:2006/01/12(木) 01:32:10
スレ違いすみませんでした。
WEBプログラミング板で聞き直します。

でも、とほほさんのスクリプトって、そんなに酷いのでしょうか?
みんなここを見て勉強しているはずですけど。

とほほさんより良いサイトがあれば教えてください。
529デフォルトの名無しさん:2006/01/12(木) 01:37:04
>>526
>とほほさんより有名なサイトを作れない雑魚どもは黙れ

とほほにもKENTにもWeb裏技にも世話になったし感謝もしてるけど
今となってはどうしようもなく汚く移植性にも再利用性にも欠ける
最悪スクリプトなのは確かだ。

かつては先生として、今は反面教師として役に立っているwww
530デフォルトの名無しさん:2006/01/12(木) 01:43:09
再利用性があれば良いってもんでもないけどな

と、移植性や再利用性が自己目的化して、本来の目的を
達成できない大量のJavaだけプログラマを見ていると思う
531523:2006/01/12(木) 01:45:10
昔は良かったけど近頃は酷くなったということなのでしょうか?
技術力がマイナス成長したということ?
あまり、あり得ない気がするのですが。

ここが悪いというのであれば、反面教師でないサイトを具体的に教えてもらいたいのですが。
532デフォルトの名無しさん:2006/01/12(木) 01:48:51
>>526
知名度は質と比例しない

>>528
テンプレや本(詳細は書籍スレ)
533523:2006/01/12(木) 02:01:11
テンプレにあった
http://www.site-cooler.com/kwl/perl/ 
を見てみましたが、とほほさんのところが悪くて、ここが良いといわれる理由がわかりません。

そもそも、OLE使って Excel を使うとかソケット使ってメールを送るとか、難しいことは書いてあるのに、
肝心のCGI の説明が全くありません。

普通にCGIを使うだけならとほほさんのところが一番良いように見えるのですが。

本に関しては、今すぐ見れないので何とも言えないのですが....
534デフォルトの名無しさん:2006/01/12(木) 02:16:10
>>533
自分が良いと思ったら他を否定してないで信じて学べ。

とほほで勉強してPerlでいろいろ作って2年ぐらいしたら
KENTやとほほ流のやり方の限界がきっと見えてくる。

すぐ正解を求めないで、もっといろいろ勉強することだ。
とりわけ、こんなところにカキコしている暇があるなら
1ステップでもコードを書いたほうがいい。そしてコードを膨らませて
取り返しの付かないような失敗もするべきだな。

535デフォルトの名無しさん:2006/01/12(木) 02:16:13
とほほさん最高!!
煽りしかできない根暗オタクどもは逝ってよし!
536デフォルトの名無しさん:2006/01/12(木) 02:19:38
私的にPerお勉強サイトはsmartが一番良いと思うけどね。
537523:2006/01/12(木) 02:51:36
>534
http://www.site-cooler.com/kwl/perl/ を否定するつもりは有りませんでした。
もし、否定しているように見えたのならすみません。

# どちらかというと、否定されているのは とほほさん のような....

でも、マジで、どの辺がどうダメなのか具体的に教えて欲しいのです。
ダメだダメだといわれるのに、どこが悪いかわからないと、勉強しようがないじゃないですか?

# とほほさんに対する単なるヒガミってことは無いですよね?
538デフォルトの名無しさん:2006/01/12(木) 03:16:28
>>537
>>529とかに書いてある。推測だけど、今となっては…ってのは
何にも知らない頃はわからなかった悪いところがわかるようになった、ってことでは。
入門編としてはわかりやすいと思うけど門から先に入るにはちょっとね。
539デフォルトの名無しさん:2006/01/12(木) 03:22:49
ここはとほほさんを妬むクズの溜まり場
まともな話ができるWebProg板に行こうぜ!
540デフォルトの名無しさん:2006/01/12(木) 04:40:54
初心者でもわかりやすく説明するにはあれぐらいが妥当じゃないか。
KENTもPerl初心者の頃は行単位の処理がわかりやすかった。
541デフォルトの名無しさん:2006/01/12(木) 06:50:10
$hoge = "/foo/bar";
use lib $hoge;

のようなことをしたいのですが、このようにすると
use lib $hoge; のとこどでエラーになってしまいます。
use lib 変数というのはできないのでしょうか?

542デフォルトの名無しさん:2006/01/12(木) 07:04:13
WebProg板ではあのコードが御神体
543デフォルトの名無しさん:2006/01/12(木) 07:23:57
>534
そんなことを言っていると、とほほを手本にした糞スクリプトが大量に発生してしまう。
(既に大量発生しているのだが)

確かに、向上心のあるヤツならがんばって、そのうち限界が見えて来るかもしれない。
だが、ほとんどの人間はがんばりもせず、やり方に疑いも持たずに糞スクリプトを日々生産するだけだ。
544デフォルトの名無しさん:2006/01/12(木) 07:48:48
>541
use が実行されるタイミングは、$hoge="/foo/bar"より前になるので、できない。
545デフォルトの名無しさん:2006/01/12(木) 09:19:24
>>543
若いものがその体たらくではわしらの時代もまだまだ安泰じゃのう。
ガッハッハッハ
───大原巌@月下の棋士
546デフォルトの名無しさん:2006/01/12(木) 09:35:45
板違いの話は相手する方も問題だな。無視しろよ。
547デフォルトの名無しさん:2006/01/12(木) 09:55:24
板違い質問に対しては誘導以外はレス不可とテンプレに書いてくれ。
わけがわからない質問者よりわかってる分悪質だ。
548デフォルトの名無しさん:2006/01/12(木) 09:55:33
カカオかよwwwwwwwwww
549デフォルトの名無しさん:2006/01/12(木) 11:29:56
>>537
とほほの方法は非常に仕組みを理解しやすい反面、環境変数決め打ちなので
・参照できない、或いは存在しない環境変数
・参照した結果なにも入っていない環境変数
を判定できない。

具体的なところではCONTENT_LENGTHやCONTENT-TYPEはCGIの場合
POSTでデータが送信されないとそもそも存在しないわけだが、
件のスクリプトでは存在して空文字列が入っているように見えてしまう。

また、
・指定していないが実は存在する環境変数
・サーバのバージョンアップなどで新しく追加された環境変数
もキャッチアップできない。

print "Content-Type: text/plain\n\n";print "$_ = ",$ENV{$_},"\n" for (sort keys %ENV);

こんなワンライナで、参照可能な全環境変数を確認できるし、
Content-Typeにtext/plainを利用すればタグ出力も不要だし
ターミナルからコマンドで確認する場合も楽だ。
(1行目を読み飛ばせば良いだけだからな)

まずそんなことはないと思うが絶対無いとは言い切れない
「どこかの環境変数に"</xmp>"という文字列が入っていたら?」
「どこかの環境変数に悪意のvbsやJavaScriptが入っていたら?」
という潜在問題への対処でもある。

こういうのは本やWebを読んでるだけじゃダメでたくさんスクリプト
書いて、ハマって、解決しないと身に付かないし、そもそも経験則
なので、blogなどに散見されるがまとまったFAQにはなりにくいんだ。

550デフォルトの名無しさん:2006/01/12(木) 11:47:38
>>607 じゃ売ればいいじゃん

♪高値で掴んで走り出す 行く先もわからぬまま
暗い夜の帳の中へ
これ以上損し出したくないと 損切った昨日の引けに
自由になれた気がした その日の夜
551デフォルトの名無しさん:2006/01/12(木) 13:38:11
perldoc perldebug してみたところ、デバッガの起動例として、
> $ perl -d -e 42
というのがありました。

この 42 って一体何なんでしょうか?
「銀河ヒッチハイクガイド」と関係ありますか?
552デフォルトの名無しさん:2006/01/12(木) 14:14:41
>>551
perldoc perlrun
553デフォルトの名無しさん:2006/01/12(木) 16:12:56
data.txtとdata1.txtを単純に以下のように連結しdata3.txtに書き出す方法を教えてください。
よろしくお願いいたします。
data.txt    data1.txt
1,山田,A     1,山田さん,10
2,鈴木,B     2,鈴木さん,15

data3.txt
1,山田,A,1,山田さん,10
2,鈴木,B,2,鈴木さん,15
554デフォルトの名無しさん:2006/01/12(木) 16:22:43
1. おもむろにテキストエディタでdata.txtを開く
2. 置換で行末に , を付ける
3. data1.txtを開き、全て選択してコピーする
4. data.txtに矩形貼り付けする
5. 名前を付けて保存でdata3.txtを作成する
555デフォルトの名無しさん:2006/01/12(木) 16:28:30
Excel
556デフォルトの名無しさん:2006/01/12(木) 16:34:05
冬休みの宿題か?
#!/usr/bin/perl
use strict;
use warnings;
use IO::File;
my %data1= parse('data1.txt');
my %data2= parse('data2.txt');
my @keys= unique( keys %data1, keys %data2 );
my $fh= new IO::File('data3.txt','>');
for( sort @keys ){
my $key= $_;
my @data1= @{ $data1{$key} || [] };
my @data2= @{ $data2{$key} || [] };
print $fh join(',',map {nval($_)} ($key,@data1[1..2],@data2[0..2]))."\n";
}
sub nval{defined $_[0] ? $_[0] : ''}
sub unique{my %t;grep !$t{$_}++,@_}
sub parse {
my $file= shift;
my $fh= new IO::File( $file ) || die("$file:$!");
my %r= ();
while(<$fh>){
chomp();
my @data = split /,/,$_;
$r{ $data[0] }= \@data;
}
return wantarray ? %r : \%r;
}
557553:2006/01/12(木) 16:36:17
>>554 有り難うございました そうします。
558553:2006/01/12(木) 16:43:58
>>556 おーっ すごーい。
556さん 感動です。感謝申し上げます。
宿題ではないです。有り難うございました 。
559デフォルトの名無しさん:2006/01/12(木) 17:01:32
そんなもん paste -d, data.txt data1.txt で終わりじゃねーか。
560デフォルトの名無しさん:2006/01/12(木) 18:37:56
>>559
Perl のスレだからな。

open eyes, pop or die;
open mind, pop or die;
chomp, print, print "\054".
<eyes> for @your = <mind>
561デフォルトの名無しさん:2006/01/12(木) 20:18:43
ポエムキタ-
562デフォルトの名無しさん:2006/01/12(木) 20:19:18
なんか無理に問題を難しくしてないか?

open IN1,"data.txt"; open IN2,"data1.txt"; open OUT,">data3.txt";
while(<IN1>){chomp; print OUT $_ . ',' . <IN2>;}
close OUT; close IN2; close IN1;


じゃダメなのか?
まあこんなことは俺も迷わず>>559と同じことをするけど。
563デフォルトの名無しさん:2006/01/12(木) 20:43:43
1列目がIDでマージするのかと(日ごろそういう作業が多いので)勝手に思い込んでましたOTL

564デフォルトの名無しさん:2006/01/12(木) 21:58:01
565デフォルトの名無しさん:2006/01/12(木) 22:51:25
566デフォルトの名無しさん:2006/01/12(木) 22:54:18
>>565>>564
 ↑片想い↓
>>561>>562
567523:2006/01/12(木) 23:42:17
>549
確かに前半部分は
print "Content-Type: text/plain\n\n";print "$_ = ",$ENV{$_},"\n" for (sort keys %ENV);
で済むし、書き方がスマートで無いことはわかりました。
スレ違いなのに、ありがとうございました。
568523:2006/01/12(木) 23:43:51
スレ違いなのはわかっていますが、最後に一つだけ教えてください。
とほほさんのコードで、もっともよく使うのは以下の部分です。

if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $query_string, $ENV{'CONTENT_LENGTH'});
} else {
$query_string = $ENV{'QUERY_STRING'};
}
@a = split(/&/, $query_string);
foreach $a (@a) {
($name, $value) = split(/=/, $a);
$value =~ tr/+/ /;
$value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
print "$name = $value\n";
$FORM{$name} = $value;
}

これが最悪とおっしゃる方々に質問です。
これを、最良の書き方をすればどうなりますか?

WebProg板で普通のコードが最悪とまで言われているのがいまだに理解できないのです。
「最悪」「反面教師」とまで言っておきながら、どこが悪いのか549以外は指摘しないし、
とほほさんを否定するばかりで、とほほさん以上のサイトを紹介してくれないですし。

569デフォルトの名無しさん:2006/01/12(木) 23:48:54
とほほ信者うぜぇ
570デフォルトの名無しさん:2006/01/12(木) 23:51:43
>>568
それは別に普通のコードだと思うけど…
妙にmap{}とか使ったりしてるコードの方が読みにくい
571デフォルトの名無しさん:2006/01/12(木) 23:59:58
ま、色々なスレを数年ROMれば分かるようになる。
572デフォルトの名無しさん:2006/01/13(金) 00:00:27
>568
この板にいるのは口先で悪口言っているだけで、実際自分では何もできない煽りばっかりなんだから、
あんまりまじめに相手するなよ。
573デフォルトの名無しさん:2006/01/13(金) 00:06:53
>>568
コーディングに限った話をすればフォーマットの"C"が無駄なくらいだな
574デフォルトの名無しさん:2006/01/13(金) 00:49:50
Content-Lengthの最大値が無いのでメモリ食い潰し
DoS攻撃を受けるな
575デフォルトの名無しさん:2006/01/13(金) 00:52:36
readのエラーチェックが無いから入力が途中で切れたり
したらCGIの内容によっては大変なことになるかもね
576デフォルトの名無しさん:2006/01/13(金) 00:54:09
>>568
> これが最悪とおっしゃる方々に質問です。
> これを、最良の書き方をすればどうなりますか?

自分で「最良の書き方」を考えても車輪の再発明どころか
劣化版ができあがるだけなので世の中で広く使われている
モジュールを使います。Perlに限ったことではありません。
577デフォルトの名無しさん:2006/01/13(金) 00:59:59
ブラウザ別Cookieの解析やマルチパートが必要になったら
それもとほほの実装をコピペして使わないといけない。
てゆうかあるのか?w
578デフォルトの名無しさん:2006/01/13(金) 01:02:08
フォームの値はデコードしてるのに名前はデコードしないのか
579デフォルトの名無しさん:2006/01/13(金) 01:30:43
            た
            し
           ま
          り
         参
       て
盛り上がっ
580デフォルトの名無しさん:2006/01/13(金) 02:01:46
とほほって有名なのか?全然知らんかったけど.
>>568 のコード現代的な Perl としてはいまいち.

簡単にいって,
1. use strict; がない (コンパイル時のチェックがきかない)
2. CGI, CGI::Util モジュールの再実装
3. my を使ってない,あと変数名がいまいち
がだめ.いま perldoc 見れない環境だからうろおぼえでかくけど普通↓だろ.

use strict; # この行がないのは基本的にだめ
use CGI;
use CGI::Util;
my $q = CGI->new;

my @names = $q->param;
foreach $name (@name) {
my $value = CGI::Util::unescape($q->param($name));
print "$name = $value\n";
$FORM{$name} = $value;
}
581580:2006/01/13(金) 02:04:06
あぁぁぁネボけて挙げてしまった…もうねるわ
処理内容としても一対一で翻訳したので微妙だがなー
582551:2006/01/13(金) 02:32:32
>>552
読んでもよくわからないのですが・・・

一応確認なのですが、
42 でなくても、 0 でも 1 でも 100000 でも効能は変わらんのですよね?
583デフォルトの名無しさん:2006/01/13(金) 03:53:55
>>(512+64+4+2)
もう1回読め。
584583:2006/01/13(金) 04:40:07
悪い、-Dと勘違いした。
http://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%BF%E6%A7%8B%E6%96%87%E5%A4%89%E6%95%B0
perlfaq3では強調されているな。
585デフォルトの名無しさん:2006/01/13(金) 04:47:11
>>568
なんでperl4から5に移り変わる前後に思考停止してそれ以上向上しようとしない人達を
信じてこだわっているのか自分にはよくわからないんだけど...

膨大なモジュールの中から標準モジュールとして選ばれ、多く人から検証されているモジュールをなぜ否定するんですか?
そしてより少ない人からしか検証されていないコードを良しとするのですか?
広く知れ渡っている設計モデルやデザインパターンを否定し、あえてスパゲッティーになりやすい冗長ないコードを書き続けるのはなぜですか?
なぜ、バグの混入が少しでも少なくなるように提供されそして、使う事を推奨されているてる機能を使わず、
たびたびバグを発生させるのですか?(使っていてもバグは発生するのに...)
なぜ、同じコードを何度も(コピペだろうけど)書こうとするのですか?
なぜ、10行コーディングすれば済むプログラムをわざわざ100行かけてコーディングしようとするのですか?

色々考えそして経験していけばそのうちわかると思う。
586551:2006/01/13(金) 05:02:43
軽くぐぐってみたんですが、このへんが元ネタですかね。
http://sumo.genetics.ucla.edu/pipermail/bioinfo/2003-July/000020.html
587551:2006/01/13(金) 05:07:41
あ、 perl 5.005 の頃から 42 とあるので違いますね。
まあとりあえず数字に深い意味はないことがわかったので良しということで。
588デフォルトの名無しさん:2006/01/13(金) 08:30:26
>>585
まあ落ち着け
589デフォルトの名無しさん:2006/01/13(金) 09:02:19
ttp://ja.wikipedia.org/wiki/%E4%BA%BA%E7%94%9F%E3%80%81%E5%AE%87%E5%AE%99%E3%80%81%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E7%AD%94%E3%81%88
>「42」はメタ構文変数に似た使い方をされることがある。「42」は、integer(整数)型変数の初期値として、プログラムのテストに使われることがある。
590549:2006/01/13(金) 12:44:01
>>568
説明すると長くなるから
ttp://perldoc.jp/docs/perl/5.6.1/perlfaq9.podの
How do I decode a CGI form?の項を1000回読め。
とほほのコードがどうしてまずいのかがよ〜く解るだろう。

ついでにCGI.pmはpure perlだから読んでみるとよかろう。
もし君が解読しきれなくても本当に正しくフォームデコード
するというのはどんなに大変なことなのかぐらいは解るだろう。

CGI/util.pmのunescapeメソッドを読むだけでも君は
ここで「とほほのコードはWebProg板では普通のコード」
と言い切ってしまったことをとても恥ずかしく思うようになるはずだ。

cgi.pmのマニュアルがよく解らないというのはオブジェクト指向や
参照渡しがよく解ってないからじゃないのかな。
cgi.pmにはcgi-lib.plもどきの関数インターフェースもあるので
Webを漁って探してみてくれ。日本語訳もあるよ。

まあ頑張れ。
591デフォルトの名無しさん:2006/01/13(金) 14:12:43
なんだ?ここはCGI.pm信者ばっかなのか?
あんなクソ重くて不要な機能テンコ盛りのモジュールのどこがいいんだか
こればかりは車輪の再発明させてもらったよ
592デフォルトの名無しさん:2006/01/13(金) 14:21:33
プギャプギャ━━━━m9(^Д^≡^Д^)9m━━━━ッ!!!!
593デフォルトの名無しさん:2006/01/13(金) 14:23:04
信者とかそうじゃないけどな
やりたいようにやればいいんじゃない?プゲラッチョ
594デフォルトの名無しさん:2006/01/13(金) 14:31:02
信者ということにしてしまわないと自分の居場所がないんだよ。
そっとしておいてやれ。
595591:2006/01/13(金) 14:37:17
だってあんなクソモジュール、信者以外の誰が使うの?
マジで教えてほしいんだけど、頼む
596デフォルトの名無しさん:2006/01/13(金) 15:13:16
俺もCGIモジュールはあんま好きじゃないな
597デフォルトの名無しさん:2006/01/13(金) 15:20:46
だからって自分で書いたらその糞よりもっと糞になっちゃうような気がするんだが
598デフォルトの名無しさん:2006/01/13(金) 15:26:46
軽けりゃいいのよぉ
599デフォルトの名無しさん:2006/01/13(金) 15:34:10
こうしてセキュリティホールが日々生まれているわけだな
600デフォルトの名無しさん:2006/01/13(金) 15:36:11
どこまでセキュリティホールって言うんだか
601デフォルトの名無しさん:2006/01/13(金) 15:49:18
私も CGI.pm は重い、というか、あまり使わない機能がてんこもりな気がしています。
かと言って車輪を再発明するのはいやなので、既存ので良いのがあれば良いのですが、
基本的な機能だけの機能限定版とか、必要なときに必要な機能だけを use するとか、
そういうのでおすすめなものがあれば教えていただきたいです。
602デフォルトの名無しさん:2006/01/13(金) 16:24:53
一昔前のマシンスペックならまだしも
今時重いとか何言っちゃってんの?
603デフォルトの名無しさん:2006/01/13(金) 16:40:16
うちのサーバは一昔前のスペックですが
604デフォルトの名無しさん:2006/01/13(金) 16:54:02
■テストコード
use strict;
use warnings;
use Benchmark qw(:all);
## テスト2ではコメントアウトをはずす
# use CGI;
# use CGI::Lite;
my $count= 10000;
sub use2 {
delete $INC{ my $pkg = shift };
eval "use $pkg;";#テスト2ではコメントアウトする
return $pkg;
}
sub func {my$p=use2(shift);my$o=$p->new();}
timethese($count, {
'CGI'=> sub {func('CGI')},
'CGI::Lite'=> sub {func('CGI::Lite')}
});
1;
__END__
605デフォルトの名無しさん:2006/01/13(金) 16:54:54
■テスト環境
OS :CentOS4.2
CPU:AMD Duron 1GHz
MEM:256MB

■テスト結果1
Benchmark: timing 10000 iterations of CGI, CGI::Lite...
CGI: 9 wallclock secs ( 9.18 usr + 0.00 sys = 9.18 CPU) @ 1089.32/s (n=10000)
CGI::Lite: 6 wallclock secs ( 5.94 usr + 0.00 sys = 5.94 CPU) @ 1683.50/s (n=10000)

■テスト結果2
Benchmark: timing 10000 iterations of CGI, CGI::Lite...
CGI: 3 wallclock secs ( 3.18 usr + 0.01 sys = 3.19 CPU) @ 3134.80/s (n=10000)
CGI::Lite: 1 wallclock secs ( 0.66 usr + 0.00 sys = 0.66 CPU) @ 15151.52/s (n=10000)
606デフォルトの名無しさん:2006/01/13(金) 16:55:51
秒間1000回以上実行できるんですけど...重いですかね?
607デフォルトの名無しさん:2006/01/13(金) 16:57:20
塵も積もればなんとやら
608デフォルトの名無しさん:2006/01/13(金) 16:58:30
オーバーヘッドを考えてない馬鹿発見
609デフォルトの名無しさん:2006/01/13(金) 17:03:28
お前も釣りが好きだな
610デフォルトの名無しさん:2006/01/13(金) 17:07:28
>CPU:AMD Duron 1GHz
>MEM:256MB

高スペック杉
611デフォルトの名無しさん:2006/01/13(金) 17:14:39
>>604
use される時や new() の中でやってる処理の内容が全然違うから
そんなの比較しても何の意味も無いよ。
612デフォルトの名無しさん:2006/01/13(金) 17:18:41
オレはTemplate Toolkit使ってるのでCGI.pmのオーバヘッドなんてゴミみたいなもんだぜ。
613デフォルトの名無しさん:2006/01/13(金) 17:24:58
use CGI;
($u, $s) = times();
print $u + $s, "\n";

これで十分なベンチだろ
ちなみに俺の環境(Cel2.4G + 512MB ActivePerl5.8 WinXP)だと
0.14〜0.155で安定しとる
614デフォルトの名無しさん:2006/01/13(金) 18:21:53
CGI自体のオーバーヘッドに比べればネコパンチ程度だよ。
塵も積もればはわかるが事実上デフォルトなモジュールなんで
なるべく使うようにしてる
multipartなんかの処理も論理的に書かれてるし。
615デフォルトの名無しさん:2006/01/13(金) 18:24:07
それとコンソールから
./abc.pl mode=preview&name=taro
でフォームと同様に値を取れるのでデバッグ時にも便利。
616デフォルトの名無しさん:2006/01/13(金) 18:39:08
CGI.pm自体は仕方が無いけど
他モジュールでCGI.pmへの依存度が高いのはなんだかなとは思う
それこそCGI::Applicationなんかquery、header、cookie位なんだからリファクタして欲しい(他人任せ)
617 ◆TWARamEjuA :2006/01/13(金) 20:02:34 BE:6099078-
では次のご質問どうぞ。
618デフォルトの名無しさん:2006/01/13(金) 22:17:03
>>616
それは敢えてそうしてるんだと思うよ。
619デフォルトの名無しさん:2006/01/13(金) 22:35:31
いずれにしても自分で書くのはクソという結論には変わりない
とほほのコピペともなれば尚更無意味
あっ、でも遊びで書いてる人はいいのかな
620デフォルトの名無しさん:2006/01/13(金) 22:37:17
>>610
それのどこが高スペックなんだ・・・
今時ノートPCでもそれ以上あるし、サーバ用途ならむしろ
低スペックだっつーの
621デフォルトの名無しさん:2006/01/13(金) 22:43:46
ああ言えばこう言う
622523:2006/01/13(金) 23:33:37
CGI.pm を使う最良のコードになるかを示して欲しかったのですが、
「CGI.pm を使う」というだけで、実際にCGI.pmを使ったコードを
書いたのは 結局 >580さんだけですね。
この >580 のコードには
>574 さんの指摘した「Content-Lengthの最大値が無いのでメモリ食い潰し」
>575 さんの指摘した「readのエラーチェック」
>578 さんの指摘した「フォームの値はデコードしてるのに名前はデコードしないの」
というのは対応済みなのでしょうか?

>585 「そしてより少ない人からしか検証されていないコードを良しとするのですか?」
google で検索した結果
とほほ CGI の検索結果のうち 日本語のページ 約 338,000 件
CGI.pm の検索結果のうち 日本語のページ 約 32,000 件
一桁以上違いますね。
「知名度は質と比例しない」と言われてしまえばそれまでですけど。
623523:2006/01/13(金) 23:34:09
とはいえ、何となく、CGI.pmを使ったほうが良いという理由もわかってきました。

以前は「勉強しろ」「何年か使い続ければわかる」「それぐらいもわからないのか」
と言った抽象的な精神論みたいなコトばっかり言われて、どこが悪いのか、
さっぱりわかりませんでした。
どこが悪いかも指摘せずに、そんな言い方をされても、簡単には納得できないのは
普通だと思います。

間違っているかもしれませんが、自分の理解としては、
とほほさんのやり方は「最悪」と言うよりも......不完全?...というか、足りない?..
...というか漏れがある?....みたいな雰囲気なんですね。

でも、なんで有名サイトはCGI.pmを使っってないんでしょう?
とほほさんとか KENT とか、みんなCGI.pm を使ってません。
624デフォルトの名無しさん:2006/01/13(金) 23:40:17
偉そうなことを言ってるけど、CGI.pm使ってるのはまだまだ少数派だからな。
以前より衰えたとはいえ、主流はまだまだとほほ系だよ。
625デフォルトの名無しさん:2006/01/13(金) 23:41:00
Perl 5.8 が主流になりつつある今、
敢えて 5.005 をひきずったコードを参考にすることはないっしょ。

5年前なら「とりあえず KENT やとほほのコードを見れ」で良かったかも知れんけど。
626デフォルトの名無しさん:2006/01/13(金) 23:43:32
>623
>でも、なんで有名サイトはCGI.pmを使っってないんでしょう?
>とほほさんとか KENT とか、みんなCGI.pm を使ってません。

なんであんなサイトがなぜ有名なのか、こっちが聞きたい。
627デフォルトの名無しさん:2006/01/13(金) 23:44:49
>>623
CGI.pmがデフォで置かれてないサーバもあるし、みんながそうしているから。
今はどうなっているか知らないけどURI unescapeもなぜか効率の悪くて汚いコードが驚くほど出回ってた。
CGI界の不思議。
628520:2006/01/13(金) 23:45:51
>521
cygwinのshellで実行しているので、それなないです。

>522 よくエラーメッセージを読んで解決しました。

open passwd, "../../etc/passwd"#<-----------------相対パス
or die "How did you get logged in ? ($!)";

while (<passwd>) {
chomp;
if (/^Administrator/) {
print "eureka!";
}

}

相対パスじゃないとダメみたいです。
絶対パスはなんでダメなんでしょう。
これはcygwinのperlの仕様なんでしょうか?

スレ違いならごめんなさい。
629デフォルトの名無しさん:2006/01/14(土) 00:19:57
>>521
>cygwinのshellで実行しているので、それなないです。

perl -v で確認したのか?
630デフォルトの名無しさん:2006/01/14(土) 00:28:00
>>626
どういうサイトのほうが有名になるべきなのか教えていただけますでしょうか? 
631デフォルトの名無しさん:2006/01/14(土) 01:09:51
もういいじゃない
ずっととほほのコード使ってればいいと思うよ
どうせ中学生の趣味プログラミングだろうし
その昔、BASICのGOTOプログラミングに夢中になった
子供たちと同じだと思えば実に微笑ましい
632580:2006/01/14(土) 01:12:01
>>622
基本的に貴方の示したコードを 1:1 に直訳しただけですからね.

CONTENT_LENGTH -> $CGI::POST_MAX=1024; # 1024 バイトに制限
read のエラーチェック -> 十分ではないですが,標準でされてます.
デコード -> CGI::Util::uscape() 使ってください

正直とほほとか KENT とかは一瞥しただけでコメントしかねますが,
かわりにオススメの Perl 入門を…

1. Learning Perl(O'reilly 入門 Perl)
Windows ユーザーなら Win32 のほうを.2. 以降は結構高度なので,まずこれを飽きるまで読むといいですよ.
2. Programming Perl(邦訳:プログラミング言語 Perl )
3. Advanced Perl (邦訳:実用 Perl プログラミング)
4. Object Oriented Perl (邦訳:オブジェクト指向 Perl マスターコース)

今は Perl Best Practice を読んでます.これはすごくイイ.
633580:2006/01/14(土) 01:12:55
あぁぁぁ,また age ちゃった…もう消えまつ
634デフォルトの名無しさん:2006/01/14(土) 01:17:17
>とほほ CGI の検索結果のうち 日本語のページ 約 338,000 件
なんで"日本語のページ"?
635デフォルトの名無しさん:2006/01/14(土) 01:20:00
簡単な判断基準を教えてやろう use string; がなかったら読む価値なしの場合がほとんど
636デフォルトの名無しさん:2006/01/14(土) 01:22:43
何故とほほが有名かというと、本当に正しく作らないと
困るような重要なWebプログラムは、そもそもPerl+CGIで
書かれないから。例外はいくつもあるけどね。MovebleTypeは
Perlだっけ。

だから、PerlのCGIプログラムを探すと必然的にどうでもいい
コードばかりザックザック出てくるわけですw

ハカーに攻撃されても困らないからいい! ちょっと負荷が
掛かったらポシャルくらいは別に気にしない! プログラムの
メンテナンスなんて不要! バグなんて知るか! そういう
場合はとほほ式のプログラムを作るといいでしょう。
あ、皮肉じゃあ無いですよ。適材適所ってことです。
637デフォルトの名無しさん:2006/01/14(土) 01:23:35
>>635のレスは読む価値無し
638デフォルトの名無しさん:2006/01/14(土) 01:28:29
×string ○strict
639デフォルトの名無しさん:2006/01/14(土) 01:29:00
mod_perl使わない程度の開発案件とか
1年くらいで使わなくなる程度の案件なら
冗長(というかいい加減に)書くこともあるし
時と場合だよねぇ
640デフォルトの名無しさん:2006/01/14(土) 03:42:33
>>623
> 以前は「勉強しろ」「何年か使い続ければわかる」「それぐらいもわからないのか」
> と言った抽象的な精神論みたいなコトばっかり言われて、どこが悪いのか、
> さっぱりわかりませんでした。
知りたい側が成長しなきゃ理解できないことのほうが世の中多いんだよ。
「今の自分がどんなに未熟でも、説明のほうがちゃんとしていればどんな物事も理解できるはず」
っていう間違った信念持ってない?
641デフォルトの名無しさん:2006/01/14(土) 04:53:51
>それぐらいもわからないのか
これでどういう成長を期待してるんだかw
642デフォルトの名無しさん:2006/01/14(土) 05:08:59
オフトピだが、>640に一言。

知らせる側がきちんと説明しないと理解してもらえないことの方が世の中多いんだよ。
「説明がどんなに酷くても、自分が正しければ相手は理解するはず」
っていう間違った信念持ってない?

たいていの場合、どんなに正しくても、権限を持っているお偉いさんたちに、わかりやすく説明できないと、
予算が取れないのですよ。
逆に、どんなに間違っていても、わかりやすく説明して、納得してもらえると、あっさりハンコもらえる。

君も大きくなって、苦労したららわかると思うよ。
643デフォルトの名無しさん:2006/01/14(土) 05:37:17
>>640
> 以前は「勉強しろ」「何年か使い続ければわかる」「それぐらいもわからないのか」
> と言った抽象的な精神論みたいなコトばっかり言われて、どこが悪いのか、

これで伸びる奴も居れば、辞める奴もいる。
まあ発奮させるにしても下手な煽り方ではあるな。
644520:2006/01/14(土) 05:40:07
>629

申し訳ありません、嘘ついていました。

perl -vで確認したところ、

This is perl, v5.8.6 built for MSWin32-x86-multi-thread
(with 3 registered patches, see perl -V for more detail)

Copyright 1987-2004, Larry Wall

Binary build 811 provided by ActiveState Corp. http://www.ActiveState.com
ActiveState is a division of Sophos.
Built Dec 13 2004 09:52:01

略)

Active State社のものでした。

さらに、パスは
/cygdrive/c/Perl/bin/perlでした。

私は、cygwinのperlでなく、Active〜のを使っていたようです。

それが原因か調査してみます。
645640:2006/01/14(土) 06:44:45
>>642
> っていう間違った信念持ってない?
持ってないよ。
ていうか、唐突にまったく関係ない話を始められても困っちゃうな。
646640:2006/01/14(土) 07:14:32
>>643
といっても仕方ないんだよな。
学習者の理解度より数段階先の話や、経験から思い知ったことへの対策の重要性を、
「現時点の学習者」に技術面で理解させ、納得させるのは至難だもん。
その辺は学習者にコツコツとステップアップしてもらうしかない。

ちなみに君のすぐ上に、主人公もゴールもまったく異なる話を始めて俺に噛み付いてる人が
いるんだけど、この人のラスト一行って、ものを理解するための必要事項として
「経験を積む」ことを挙げるという、俺の主張とまったく同じ内容になってるんだよね。
一体何に噛み付きたかったんだろw
647523:2006/01/14(土) 08:24:49
>580さん
とほほ方式はココがダメ!と指摘されているのに、CGI.pm方式で書いても、
同じ問題が残っているように感じたので質問させてもらいました。

・CGI.pmで書いても書き方によってはとほほ方式で指摘された問題が残る場合がある。
・ただし、その問題解決のための関数は既に用意されている。
ということですね。

オススメの Perl 入門まで教えていただき、ありがとうございます。
(邦訳って...なにか、英語の原書を薦められてるような気も....)
週末、O'reilly 入門 Perl を買ってきます。

これまでの意見で一番参考になりました。ありがとうございました。
648523:2006/01/14(土) 08:28:08
>>640
成長しないと理解できないことが多いことは痛いほど承知してます。

ただ、2chで全く理由を示さないまま否定されても、
単なる煽りなのか、本当に問題があるのか判断できないのです。

たとえば、2chで
「Perl はダメだ。 Rakuda のほうがいい。理由? そんなの勉強すればわかる」
と言われて、Perlをやめて Rakuda を勉強する人は少ないと思うのです。

実際、まだみなさんの説明が完全に理解出来ているとは言えません。
でも、568 以降の書込はきちんと悪い理由を示してもらっているので、
煽りではなさそうだということがわかったし、なんとなくCGI.pmを使った
ほうが良さそうだとも思えるようになりました。

これからCGI.pmの使い方とか勉強していこうと思います。
いつか、理解できるようになったら、とほほ方式を頭ごなしに否定するのでなく、
「この点がこんな風に悪いんだよ」と説明できるようになりたいです。

スレ違いの上、チラシの裏ですみませんでした。
649デフォルトの名無しさん:2006/01/14(土) 09:11:07
ん?なんだこの伸びようは
まったりいこうよまったり
650デフォルトの名無しさん:2006/01/14(土) 09:47:29
本人がまとめに入ったんだから
以後この話題続けた奴は荒らし決定な
651デフォルトの名無しさん:2006/01/14(土) 10:31:54
> ただ、2chで全く理由を示さないまま否定されても、
> 単なる煽りなのか、本当に問題があるのか判断できないのです。
嘘を嘘と(ry
652デフォルトの名無しさん:2006/01/14(土) 10:44:59
自分で煽りかどうかを判断できないなら、2chで
勉強しようとするなよw
653 ◆TWARamEjuA :2006/01/14(土) 10:59:06 BE:6099078-
はいはい次の質問どぞー♪
654デフォルトの名無しさん:2006/01/14(土) 11:12:50
変なコテまで沸いてるし
末期だな
655デフォルトの名無しさん:2006/01/14(土) 11:20:00
そう簡単に終わりなんて来ないよ
良い流れも悪い流れもアッサリ死ぬのが2ch
656デフォルトの名無しさん:2006/01/14(土) 14:51:22
          /  /-'―  _/ ´―- 、ヽ       ',
          ,′ i′           ヽ|         l
       l  l   __     __    |       l
        |   | ィ´:::}'     {:::::::l\  |      |
        | ,|/弋ン   ,.  弋_ソ  l |.        |   
        |:.:.{ノ    }⌒{       } -|.:.:. . .:. .  l
       |:.:.ト---‐′ ヽ、_____,ノ  |:.:.:.:.:.:.:.:.:.:.:.:.l
.         |:.:.',                |:.:.:.:.:.:.:.:.:.:.:./
.        |:.l:.\    ゚        |:.:.:.:.:.:.:.:.:.:./
          l∧,ハ/')、           _,.|:.;.:.:.:.:.;.:.:./
         ′ / /__ `7 _┬   _|Vj/∨∨ル′
         / ´ -┤__ノ   ̄ ̄  \_
          r|   _┤: l:{ー ^ー ^ァ' ̄: :\
657デフォルトの名無しさん:2006/01/14(土) 17:56:50
>>644
なら、それが原因だな。
とりあえず、cygwin perlで実行した結果を得たいだけなら
$ /usr/bin/perl 〜.pl
として明示的にcygwin perlを起動すれば良かろう。

もっとも、Cygwinのシェル内で実行したときには、cygwin perlが起動するように
pathを設定し直した方が良いと思うが。
658デフォルトの名無しさん:2006/01/14(土) 18:05:14
これを期にCGI::Liteモジュールを使う形に移行しようかなと思ったのですが、
cpanにあるモジュールは再配布しても良いですか?
659デフォルトの名無しさん:2006/01/14(土) 18:12:09
>>658
CPAN で配布されているか否かは関係無い。
それぞれのモジュールが採るライセンスに準じる。
http://search.cpan.org/~smylers/CGI-Lite-2.02/Lite.pm#COPYRIGHT_INFORMATION
660デフォルトの名無しさん:2006/01/14(土) 18:19:09
CGI::LiteはライセンスUnknownになっていて、作者もCGI::Liteを放棄して
行方不明とのことなのでいいんじゃないでしょうか。

661デフォルトの名無しさん:2006/01/14(土) 18:22:18
C言語のプログラムからPerlのプログラムを呼び出すには
どのような方法があるのでしょうか?
662デフォルトの名無しさん:2006/01/14(土) 18:29:04
ヒアドキュメントで

$a = <<UNKO;
・・・・・・
UNKO



$a = <<UNKO
・・・・・
UNKO
;

って何か違いがありますか?
663デフォルトの名無しさん:2006/01/14(土) 19:06:26
>>659-660
ありがとうございます。
勉強になりました
664ヽ(´ー`)ノ ◆.ogCuANUcE :2006/01/14(土) 19:10:49
>>660
ライセンスあるよ。>>659 のリンク先に書いてある。

>>661
呼び出して何したいかによる。
exec*、system、libperl、お好きなのをどうぞ。
665661:2006/01/14(土) 19:50:40
>>664
CプログラムからPerlプログラムを利用して得られた結果(文字列)を
Cプログラムで受け取りたいのですが、
このような場合にはどの方法が良いでしょうか?
666ヽ(´ー`)ノ ◆.ogCuANUcE :2006/01/14(土) 20:57:37
>>665
受け取るだけ(対話的な Perl スクリプトじゃない)なら、popen() が簡単。
凝った事をしたいなら exec* を。
667デフォルトの名無しさん:2006/01/15(日) 01:07:33
質問です。
perlに関しては、ver.4の頃の知識止まりで、最近の事を良く知らんのですが、
モダンなperlをサクッとエレガントに解説してくれるようなお勧め参考書ってありますか?

cgiやら正規表現の初歩やら、スクリプトやOOPの何たるかをダラダラ書いてるような
本はNGってことで。
668デフォルトの名無しさん:2006/01/15(日) 01:09:56
ありません
669デフォルトの名無しさん:2006/01/15(日) 01:12:51
らくだ本
670デフォルトの名無しさん:2006/01/15(日) 02:00:34
>>662
こう書けば分かりやすい?

$text = join "\n"x3,
<<_P_
1段落目
_P_
,
<<_P_
2段落目
_P_
;

$text = join "\n"x3, <<_P_, <<_P_;
1段落目
_P_
2段落目
_P_

違いと言えば、通常ありえないけど開始識別子の直後に複数行にわたるコードを書きたいときはセミコロンを後ろに持っていくしかないね
671デフォルトの名無しさん:2006/01/15(日) 02:10:16
最近のらくだ本には、CTBCPPの話が載ってないんだよな。
CTBCPPの延長で、Perl5のチュートリアルがあればなぁ・・・。
672デフォルトの名無しさん:2006/01/15(日) 02:45:59
>>667
上の方で誰かも書いてたけど、全くの初心でないなら
SMART
ttp://www.rfs.jp/sb/perl/index.html
を必要なところから読めばいいかなと。

5.8からI/OやThread、文字コードの扱いなどかなり変わったので、
今からなら5.005や5.6はブッチして5.8に入るのが良策かと。

あとは>>3あたり
673デフォルトの名無しさん:2006/01/15(日) 04:22:57
>>672
SMART は駱駝本 2nd の劣化コピーに作者の偏った主張や
嘘を紛れ込ませたものという印象が強くて人には勧め難いな。
一見良サイトな分、余計にね。
674デフォルトの名無しさん:2006/01/15(日) 04:30:15
河馬屋二千年堂にくらべればマシ
675デフォルトの名無しさん:2006/01/15(日) 04:34:41
また微妙な
676デフォルトの名無しさん:2006/01/15(日) 05:04:36
結局、良解説サイトはないのか?
677デフォルトの名無しさん:2006/01/15(日) 05:32:05
>>676
「ズブの素人が取っかかりに読む」より上のものをお望み
なら、素直に駱駝本 or perldoc 、が正解だと思うよ。

変に噛み砕かれた説明で誤解して覚えるより、ほんの少し
苦労して正しく覚えた方が結局近道だしね。読み易い一次
情報なんだからそれ以上は望めないでしょ。
678デフォルトの名無しさん:2006/01/15(日) 08:38:46
PerlわかるんならCPANモジュール見るのが良いんじゃない?
679デフォルトの名無しさん:2006/01/15(日) 09:17:18
>>678
うん。実際のところ最近の流れで初めてCGI.pmを取っ掛かりに標準モジュールで
PurePerlなヤツ幾つか読んだけどスゲー勉強になった。星の数あるCPANから標準
になったものはPerlコーディングのお手本でもあるね。

やはりソースに勝る教科書はないな。
680644:2006/01/15(日) 12:56:47
>657
できました。

明示的にcygwinのperlを指定したら、
絶対パスで起動できました。

pathも切り替えます。

大変勉強になりました。
ありがとうございます。
681デフォルトの名無しさん:2006/01/16(月) 02:02:17
>>670
そういう仕組みがあるんですね。知りませんでした
どうもありがとうございます
682デフォルトの名無しさん:2006/01/16(月) 23:32:24
次の答えを教えてください。

以下のタグを結合したい。

(1)<M>hogeM</M><X>hogeX</X> →  <X>hogeMhogeX</X>
(2)<X>hogeX</X><M>hogeM</M> →  <X>hogeXhogeM</X>
(3)<M>hogeM</M><X>hogeX</X><M>hogeM</M>   → <X>hogeMhogeXhogeM</X>
※<M>hogeM</M><X>hogeX</X><M>hogeM</M><X>hogeX</X> は結合しない。

<例>
※以下は一行で、\ は連結の意味です。

......hoge.......<M>hogeM</M><X>hogeX</X>.....\
........hoge......<X>hogeX</X><M>hogeM</M>.....\
.....hoge.........<M>hogeM</M><X>hogeX</X><M>hogeM</M>...\
.........<X>hogeX</X>................<M>hogeM</M>..\
..<M>hogeM</M><X>hogeX</X><M>hogeM</M><X>hogeM</X>

......hoge.......<X>hogeMhogeX</X>.......\
......hoge......<X>hogeXhogeM</X>..........hoge....\
.....<X>hogeMhogeXhogeM</X>............<X>hogeX</X>...\
.............<M>hogeM</M>...\
.<M>hogeM</M><X>hogeX</X><M>hogeM</M><X>hogeM</X>

正規表現でも、何でもOKなのでお願いします。
683デフォルトの名無しさん:2006/01/16(月) 23:38:50
>>682
Perlでリクに答えるスクリプトを作るスレ
http://pc8.2ch.net/test/read.cgi/tech/1086143976/
684デフォルトの名無しさん:2006/01/16(月) 23:41:11
>>683
おおー
そんなすれが〜
ありがとん。
685デフォルトの名無しさん:2006/01/17(火) 20:08:16
Perlでモジュールの勉強をするなら
MorningMusume.pmのソースを読むべし。
686デフォルトの名無しさん:2006/01/17(火) 23:06:48
読んでみたが
別に特にいいと思われる所は無かった
smartので十分
687デフォルトの名無しさん:2006/01/18(水) 02:50:59
>>686は盲目
688デフォルトの名無しさん:2006/01/18(水) 03:15:22
恋してるんだろ
689デフォルトの名無しさん:2006/01/18(水) 03:16:07
ん?どこが盲目なのん?もしかして作者さん?
さらっと斜め読みしただけだから知らんけどね
690デフォルトの名無しさん:2006/01/18(水) 03:20:58
また逃げんの速いな
691デフォルトの名無しさん:2006/01/18(水) 03:40:16
そんなこと言われたからもう一回じっくり読んでみた
やっぱ>>686に変わりないわ
付け足すとしたら
ttp://www.pure.ne.jp/~learner/program/Perl_oo.html
これぐらいかな
692デフォルトの名無しさん:2006/01/18(水) 03:47:45
俺も見てみたけど
別にぃ・・って感じ・・
693デフォルトの名無しさん:2006/01/18(水) 03:48:20
あっ作者さんでしたか
失礼失礼^^;
694デフォルトの名無しさん:2006/01/18(水) 04:01:43
モーオタかよ
勘弁してくれ
695デフォルトの名無しさん:2006/01/18(水) 04:24:54
夜分遅くに質問すみません
(Shift_JIS)

$file = 'D:\picture\ニーソックス.jpg';
これを

D picture ニーソックス.jpg

に分割したいんですが
split(/[\\\/:]/, $buf);
こうすると ニーソックス の "ソ" の2byte目が "\" である事から

D picture ニー・ ックス.jpg

と、中途半端な所で切れてしまいます。
そこで
split(/[^\x81-\x9f\xe0-\xef][\\\/:]/, $buf);
と、Shift_JISの特性を考慮した所

\pictur ニーソックス.jpg

となってしまいます。
何かスマートな書き方はないでしょうか。
696695:2006/01/18(水) 04:37:18
あ…あとスミマセン
encodingプラグマは使わない方向でお願いします
697デフォルトの名無しさん:2006/01/18(水) 06:23:06
splitじゃなくてキャプチャ使えば悩むことはない
@list = $file =~ /((?:sjis|asciiから\と:を抜いた正規表現)+)/g
698デフォルトの名無しさん:2006/01/18(水) 09:36:47
配列の中身をJcodeで変換したいのですが、
ループ毎に行うのしかないのでしょうか?
699デフォルトの名無しさん:2006/01/18(水) 10:30:02
perlのメモリ管理についての質問です。

@hoge
に1Gのデータが入ってるとして
@hoge = ();
と初期化したらメモリは開放されるのでしょうか?
700699:2006/01/18(水) 10:31:20
すみません。調べたらすぐに分かりました。
失礼しました。。。
701デフォルトの名無しさん:2006/01/18(水) 10:44:08
漏れもしりたい。undef使ってるんだけどどうなの?
702デフォルトの名無しさん:2006/01/18(水) 11:52:54
>>698
結局はループだが一行でどうだ
$_ = Jcode->new($_)->euc foreach @hoge;

mapを使っても書けるがこっちはメモリ効率が悪いからお勧めしない
@hoge = map { Jcode->new($_)->euc } @hoge;
703デフォルトの名無しさん:2006/01/18(水) 11:59:03
>699-701
Perlは何やってもメモリ解放なんぞせんよ。
undefしても内部のメモリプールに返すだけ。
@hoge = (); はそれすらしない。
メモリ消費が心配だったら、その部分だけforkすればいい。
704699:2006/01/18(水) 11:59:11
>Perl は、ガーベジコレクションの機能を備えています。
だそうです。他のサイトも見たけど

undef @hoge;
は開放できて
@hoge = ();
は開放できないみたい。

====

えと、すみません。 今度は調べたのですが分からないので
また新しい質問させてください。

# a.pl
$hoge = "a";1;

# b.pl
require "a.pl";print $hoge."\n";exit 0;

で以下のように実行すると

$ perl -w b.pl
Name "main::hoge" used only once: possible typo at b.pl line 3.
a
$

と出てしまいます。この警告を消すことは出来ないのでしょうか?
よろしくお願いします。
705デフォルトの名無しさん:2006/01/18(水) 12:03:49
>>704
# b.pl
BEGIN { require "a.pl"; } print $hoge."\n";exit 0;

でもこのスレ的にはmy宣言してstrictなソースを書いたほうがいいかと
706699:2006/01/18(水) 12:10:12
>>705
ありがとうございます。とりあえず動きました。
BEGIN と strict についてはこれから調べてみます。
707689:2006/01/18(水) 13:42:30
>>702
ありがとうございます。こうしてみました。

my $jconv = new Jcode;
$_ = $jconv->set($_, 'sjis' )->euc foreach @hoge;
708デフォルトの名無しさん:2006/01/18(水) 13:43:41
名前激しく間違えた
709デフォルトの名無しさん:2006/01/18(水) 14:22:59
既出かもしれませんが、Perl5.8 で Encodeモジュールを使って
UTF-8 -> ISO_2022_JP へ 文字コードを変換しているのですが、
全角チルダ(〜)が文字化けし、? に置き換わってしまいます。

Jcode を使うと正常に変換されているようなのですが、
今回勉強を兼ねて Perl5.8標準のEncodeを使用したく思っております。
何か解決策などありますでしょうか・・・?
710デフォルトの名無しさん:2006/01/18(水) 14:26:54
>>709
それに関する質問は、もう散々既出。
711デフォルトの名無しさん:2006/01/18(水) 15:33:06
>>704
>>Perl は、ガーベジコレクションの機能を備えています。
>だそうです。

そうそう。そのおかげでスクリプトを実行し終えると
使ったメモリはきれいさっぱり解放してくれるわけだよ。
実行中には解放なんてしないんだって。
712デフォルトの名無しさん:2006/01/18(水) 15:38:58
実行中にメモリが足りなくなりそうだったら、動的に変数の生死を調べて
適宜解放するってのがGCだべさ

終了時に全解放されるのは当たり前
713デフォルトの名無しさん:2006/01/18(水) 15:42:02
encodingプラグマが使えるPerlのバージョンは幾つからでしたでしょうか
後Encodeモジュールが標準搭載されたのもお願いします
714デフォルトの名無しさん:2006/01/18(水) 15:45:19
>>713
5.8から。
715デフォルトの名無しさん:2006/01/18(水) 15:46:43
>>714
どうもありがとうございます。
716709:2006/01/18(水) 16:04:46
そうですか。。色々探してみたのですがわかりませんでしたので、
こんな感じで対応しておきました。

 s/\x{ff5e}/\x{301c}/g;
717デフォルトの名無しさん:2006/01/18(水) 16:58:52
>>711
なんかすごい釣りだな。
718デフォルトの名無しさん:2006/01/18(水) 17:22:29
質問させて下さい
open関数はパイプや標準出力を開く事ができますが
sysopen関数はファイルだけなのでしょうか?
宜しくお願いします
719デフォルトの名無しさん:2006/01/18(水) 18:42:27
GCつーか参照カウンタだけどな
まぁ、黒豹でも読んでくれ
720デフォルトの名無しさん:2006/01/18(水) 19:12:25
>>703
> undefしても内部のメモリプールに返すだけ。
> @hoge = (); はそれすらしない。

@hogeの各エントリも返さない?
721デフォルトの名無しさん:2006/01/18(水) 19:21:58
Perlで作ったデーモン走らせてるけど、ハッシュとかかなり大きく
なることがあるので undef してるけど、ps 見る限り解放はされて
ないような・・・
PerlのGCはメモリプールに返すためのものなのでは?
722デフォルトの名無しさん:2006/01/18(水) 19:35:03
>>721
俺もそんなことあった気が。
誰か真相を教えてくれ。
723デフォルトの名無しさん:2006/01/18(水) 19:42:12
>>701
気になったので、軽く確認してみた。ActivePerl 5.8.6
方法は、\@hogeの文字列値を使ってunpackのPで変数内を覗き見
@hoge=() では $hoge[0..$#hoge] が未アロケート状態に,
undef @hoge では加えてxav_array(配列管理用の領域)も未アロケート状態になった。
また、
 ・各要素($hoge[0..$#hoge])の文字列領域
 ・アレイ構造体のxav_array(中身はポインタの配列)
は開放時にメモリもfree(OSへのメモリ返却はライブラリに依存)されたが、
 ・各スカラーヘッダ構造体
 ・各スカラー構造体
はfreeされなかった。
xav_arrayの変化は、例えば
$#hoge=63; # xav_fill=63,xav_max=63
$#hoge=31; # xav_fill=31,xav_max=63;
@hoge=(); # xav_fill=-1,xav_max=63
undef @hoge; # xav_array=NULL,xav_fill=-1,xav_max=-1
といった感じ。
724デフォルトの名無しさん:2006/01/18(水) 22:53:06
>>723
検証乙。Devel::Peek使うと楽だったんじゃないか?
725721:2006/01/19(木) 10:53:08
>>723
検証乙。
てことは、うちの環境がfreeしてもOSに返されないだけなのか。
どっちにしても、返されないんじゃ意味ないな・・・
726デフォルトの名無しさん:2006/01/19(木) 13:41:29
知識が足りず理解しきれてないのですが、
・undefしとけばfreeは呼ばれる。
・freeで開放されるかどうかはOSに寄る。
・()での初期化はfreeがよばれないので可能性すらない。
っていうことですか?
727デフォルトの名無しさん:2006/01/19(木) 19:32:40
一般的なUNIXでは、free しても OS には返されない。
728デフォルトの名無しさん:2006/01/19(木) 19:43:51
Perlでプログラミングするとき
オブジェクト指向・デザインパターンバリバリ使ってる香具師いる?
729デフォルトの名無しさん:2006/01/19(木) 20:16:09
my(@a,$a,%a);
sub mem_check {print "$_[0],",`ps auxw|grep mem.pl|grep -v grep`;}
$a = 'x' x 1000000;mem_check('scalar1');
$a = '';mem_check('scalar2');
undef $a;mem_check('scalar3');
$#a = 1000000;mem_check('array1');
@a=();mem_check('array2');
undef @a;mem_check('array3');
$a{a} = 'x' x 1000000;$a{b} = 'x' x 1000000;mem_check('hash1');
delete $a{a};mem_check('hash2');
undef %a;mem_check('hash3');
sub test1 {my @b;$#b=1000000;}
test1();mem_check('test1');
sub test2 {my @b;$#b=1000000;undef @b}
test2();mem_check('test2');
730デフォルトの名無しさん:2006/01/19(木) 20:17:56
scalar1,***** 2693 0.0 1.3 9896 3324 pts/1 S+ 13:25 0:00 perl mem.pl
scalar2,***** 2693 0.0 1.3 9896 3336 pts/1 S+ 13:25 0:00 perl mem.pl
scalar3,***** 2693 0.0 0.9 8916 2360 pts/1 S+ 13:25 0:00 perl mem.pl
array1,***** 2693 0.0 2.5 12824 6276 pts/1 S+ 13:25 0:00 perl mem.pl
array2,***** 2693 0.0 2.5 12824 6284 pts/1 S+ 13:25 0:00 perl mem.pl
array3,***** 2693 0.0 0.9 8916 2376 pts/1 S+ 13:25 0:00 perl mem.pl
hash1,***** 2693 0.0 2.5 12836 6296 pts/1 S+ 13:25 0:00 perl mem.pl
hash2,***** 2693 0.0 2.1 11856 5320 pts/1 S+ 13:25 0:00 perl mem.pl
hash3,***** 2693 0.0 1.7 10876 4340 pts/1 S+ 13:25 0:00 perl mem.pl

centOS 4.2上のperl 5.8.5でためしてみたのですが
VSZもRSSもundefをしたところでへってるように見えます。
731デフォルトの名無しさん:2006/01/19(木) 23:28:34
ここで質問して良いか疑問ですがどなたかご教授願います。

perlで認証付きサイトを構築しようと考えています。
まずlogin画面があり、認証後サイトを見れるという感じなのですが
認証後のサイトURL直入力などを防止する為にはどのような対応が良いのでしょうか?
idとパスワードを画面遷移ごとにpostデータとして送るというのはなんか
パスワードがソース内に表記されているという事で嫌な感じがしますが
一般的なのでしょうか?
最近のセキュリティソフトではリファラを出さないそうなのでこれも使用しない
方向で考えています。

732デフォルトの名無しさん:2006/01/19(木) 23:35:29
>731
CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
(WEBプログラミング板 http://pc8.2ch.net/php/ )
733デフォルトの名無しさん:2006/01/20(金) 00:07:27
print "1番目は[split(/,/, $aaa)]->[0]\n";
という文がうまくいかないので、

print "1番目は";
print [split(/,/, $aaa)]->[0];
print "\n";
としているのですが、何か他に良い書き方があるのでしょうか。
おねがいします。
734デフォルトの名無しさん:2006/01/20(金) 00:27:23
>>733
カンマでいいじゃないか
print '1番目は', (split(/,/, $aaa))[0], "\n";

先日思いついたBad Tips
print "1番目は${\do{(split(/,/, $aaa))[0]}}\n";
print "1番目は${proc((split(/,/, $aaa))[0])}\n"; sub proc {\shift}
735デフォルトの名無しさん:2006/01/20(金) 08:23:44
print "1番目は@{[[split(/,/, $aaa)]->[0]]}\n";
736デフォルトの名無しさん:2006/01/20(金) 08:39:36
このスレの回答者はレベル高いね。
コードをいかに短くするかという点においては凄いと思う。
だけど、サーバのスクリプトには使いたくないな。

短さを求めるこれらの美学には、エラー検証・セキュリティ対策が抜け落ちてるから。
そんなわけで、C/Java風のコードになってしまう。お前らはそんなことない?
737デフォルトの名無しさん:2006/01/20(金) 09:04:33
>>735
やはりperlfaq4とperlrefに同様の方法が載ってたか。すっかり見落としてた…

>>736
書き捨ては書き捨て、サーバの管理スクリプトは管理スクリプトでしょ
漏れはそういうのは結構エラー処理して書くよ。
しかし、それでもCやJavaっぽくなることはないと思うが・・・
短く書くことだけがPerlらしさではないと思うがどうかな
738デフォルトの名無しさん:2006/01/20(金) 09:36:25
>>736
737の言うように短く簡潔なコードを書くこととエラー/例外処理を丹念に行うことは相反しない。
ただperlerは短く書くことそのものが目的になってしまいがちなのも事実。
739デフォルトの名無しさん:2006/01/20(金) 09:42:27
Perlの場合、短さと簡潔さは両立すると限らない。
740デフォルトの名無しさん:2006/01/20(金) 09:45:34
分かりやすくて短いのならいい
コードを短くした上で結局コメントつけて解説するくらいなら、基本構文で書く
741デフォルトの名無しさん:2006/01/20(金) 09:48:48
Cだと長くてエラー処理無しのコードも多いけどな
Javaはエラー処理せざつを得ないから当たり前
742デフォルトの名無しさん:2006/01/20(金) 10:22:51
そういや他の言語で書くときは絶対使わない三項演算子をPerlでは多用してしまう。
なんでだろ?
743デフォルトの名無しさん:2006/01/20(金) 10:51:05
コーディングは文化
744デフォルトの名無しさん:2006/01/20(金) 11:03:40
>>742
俺C++でも結構三項演算子使う。
745デフォルトの名無しさん:2006/01/20(金) 12:26:10
> 短さを求めるこれらの美学には、エラー検証・セキュリティ対策が抜け落ちてるから。
ヘボだからでしょ。
746デフォルトの名無しさん:2006/01/20(金) 12:49:52
お前らって絶対難癖付けないと気がすまないタイプだよな
747デフォルトの名無しさん:2006/01/20(金) 12:59:15
>>746
> お前らって絶対難癖付けないと気がすまないタイプだよな

頼もしいねえ。
748デフォルトの名無しさん:2006/01/20(金) 13:04:04
749デフォルトの名無しさん:2006/01/20(金) 13:04:35
クッキーについてですけどSet-Cookieで保存できる最大文字数ってどれくらいですか?
750デフォルトの名無しさん:2006/01/20(金) 13:12:41
751デフォルトの名無しさん:2006/01/20(金) 13:15:37
ブラウザの実装次第だけど大体は4096byte
752デフォルトの名無しさん:2006/01/20(金) 13:18:39
753デフォルトの名無しさん:2006/01/20(金) 13:20:07
実際 session id ぐらいしか食わせないけどな
754733:2006/01/20(金) 23:00:45
>>734
カンマですか、言われてみればピリオドでもいけますね。
気づきませんでした。ありがとうございます。
>>735
@{[[split(/,/, $aaa)]->[0]]}の @{[ ]} あたりがいったいどうなって
いるのか見当もつかないのですが、何を勉強すればよいのでしょうか。
「@[{」でぐぐってみたのですが、何も出ませんでした・・・
キーとなる言葉が御座いましたら御示唆くださいませ。
755デフォルトの名無しさん:2006/01/20(金) 23:39:02
>>754
> キーとなる言葉
 >>737
 > やはりperlfaq4とperlrefに同様の方法が載ってたか。
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq4.html#how_do_i_expand_function_calls_in_a_string
http://www.kt.rim.or.jp/~kbk/perl5.005/perlref.html
756クロエ:2006/01/21(土) 00:00:14
【1】@〜Mまでユーザーが任意に入力した数値を総計
【2】☆・△・■ ユーザーが任意入力した3つの数値を総計
【2】÷【1】を結果として表示
以上の様なCGIをプログラミングしてもらおうと、代行屋さんに見積もりしてもらいました。17000円との事でしたが、普通のお値段でしょうか?カモられていないか心配ですw
757デフォルトの名無しさん:2006/01/21(土) 00:09:11
え、オチは?
758デフォルトの名無しさん:2006/01/21(土) 00:10:46
一ヶ月20日として、一人月50万なら、
一日2.5万円。
半日で1.75万円。


まぁ妥当なとこじゃねーの?
759デフォルトの名無しさん:2006/01/21(土) 00:20:07
桁を一つ間違えているのかと思ったよ。
>>756のような頭の足りない人間の相手をしなきゃならんし。
760デフォルトの名無しさん:2006/01/21(土) 00:41:27
>>756
めちゃくちゃ安いな。
赤字でてるだろ向こうは。
761デフォルトの名無しさん:2006/01/21(土) 01:18:15
>>756
地域によっても違うが、かなり安い。(正直、自分だったらこんな仕事受けない)
ただ、こんなところで聞いても何の役にも立たない。
心配なら他の業者に合見積もりをとること。
762デフォルトの名無しさん:2006/01/21(土) 01:20:36
みんな優しいな。
763デフォルトの名無しさん:2006/01/21(土) 01:54:56
そんなので金とれるんだ・・・おれでもできるな・・・
学生だけど小使稼ぎと勉強がてらにコーディング出来るバイト探そうかな
764デフォルトの名無しさん:2006/01/21(土) 01:59:39
>756
>763 みたいな素人が作るとしたらもっと安くできる。ただし出来は......
765デフォルトの名無しさん:2006/01/21(土) 02:01:36
動きゃいいんだ・・・ちくしょう・・・
766デフォルトの名無しさん:2006/01/21(土) 11:07:58
>>756
それ間違いなくぼったくり。作成時間5分。
my @k = (1..14, '☆', '△', '■');
my ($s1, $s2) = (0) x 2;
for (@k) { print "$_ は? "; (/^\d+$/ ? $s1 : $s2) += <>; }
print join('+', grep /^\d+$/, @k), " = $s1\n";
print join('+', grep !/^\d+$/, @k), " = $s2\n";
print "$s2 / $s1 = ", $s2 / $s1;
767デフォルトの名無しさん:2006/01/21(土) 11:56:22
CGIなんだから入力用のページや結果出力用のページも作らないと。
1ページ辺りの相場は10000〜30000円程度、
CGIスクリプトはフルスクラッチで50000円くらい?
768デフォルトの名無しさん:2006/01/21(土) 12:00:26
>>766
せんせえ、それCGIになってねえっす。

あ、ちゃくっとuse CGIで技術サイトにあるようなForm部品むき出しのようなの
取って付けても駄目っす。
みっともなくない程度に最低限のデザインもしなきゃクライアントに怒られるっす。

それに加えて、概要設計書、詳細設計書、仕様書、テスト設計書とテスト結果、
それにまつわる数回の打ち合わせ、瑕疵対応まで入れて半人日17,000円で
じゃキツいっす。(この規模だから概要設計書と詳細設計書は仕様書で代用
させてもらうとしても・・・)
どんな小さな、たとえ3行スクリプト作成10秒でもCGI一本\17,000は安いっすよー

俺SOHOで今仕事に困ってますけど、その値段ではCGI作成は受けられないですぅ。
769デフォルトの名無しさん:2006/01/21(土) 12:07:29
>>766
そりゃ、こういう仕事やったことないなら、ボッタクリと思うかもしれんけどね。

CGIなんだから、それだけじゃ動かないだろ? フォームのHTMLの方も必要だし。

しかも>>756はどう見ても超ド級初心者なんだから、納品後に質問が来ることも
考えないといけない。「どうやって設置するの?」「FTPって何?」とか。
設置したサーバがメンテナンスに入っただけなのに、「動かない」と言ってくる
ことも考えられる。
(アフターサポート一切無しという契約でも、電話がかかってきて40分ロスするだ
けで、0.1人日くらいは損をする)

さらに納品書・仕様書や、請求書も作らないといけない。
打ち合わせなり納品時なりの交通費も問題だ。

そう考えると、>>761と同意見で俺は17000円では引き受けない。ペイしないもん。
フォームHTMLとセットで最低4-5万円はもらわないと。
770デフォルトの名無しさん:2006/01/21(土) 12:15:19
>>767-769
まあ、実務経験者と趣味でやってる素人の違いということで。
今頃766は顔真っ赤にしてるだろうから、そろそろ勘弁したれw
771デフォルトの名無しさん:2006/01/21(土) 12:18:52
世間知らずの学生とWeb屋はWebProg板逝け
772デフォルトの名無しさん:2006/01/21(土) 12:28:36
$txt="abcabc";
print $1 if $t=~/(a.*?$)/;
この場合、*? を使用しての最短一致なので abc となると思ったのですが、abcabc となります
なぜでしょうか?
773デフォルトの名無しさん:2006/01/21(土) 12:30:20
そりゃ終端へのマッチを要求してるからね。
774デフォルトの名無しさん:2006/01/21(土) 12:31:38
ああ違うか。どこから一致させるかとかは門外漢なので他の人に。
775デフォルトの名無しさん:2006/01/21(土) 12:36:07
>>772
「欲張りマッチ」でググる
776デフォルトの名無しさん:2006/01/21(土) 12:52:41
>>772
初心者が嵌りがちなとこ。よって、あんたはまっとうな初心者。
今後もまじめにやる気があるなら、推奨書を買いなされ。
777766:2006/01/21(土) 13:51:45
>>756
よくわからんけど暇な業者が必死っぽいのでこっちに張っておいた。
http://pc8.2ch.net/test/read.cgi/php/1036141603/
778デフォルトの名無しさん:2006/01/21(土) 14:23:22
Perlでhtmlファイルを書き出したいんですが、どこか解説サイトないですか?
分かりやすいサンプルでもいいのでお願いします。
779デフォルトの名無しさん:2006/01/21(土) 14:24:08
>>778
Google で検索ぐらいしろよ。
780デフォルトの名無しさん:2006/01/21(土) 14:34:36
open OUT, '>./out.html';
    print OUT '<html>';
close OUT;
781クロエ:2006/01/21(土) 16:34:45
板違いでしたね。ごめんなさい。
777さんありがとうございます。試してみます。
782デフォルトの名無しさん:2006/01/21(土) 16:58:05
>>776
推奨書ってこれ?
http://www.oreilly.co.jp/books/4873111307/toc.html

>>772
最短一致とか最長一致とかいう表現が悪いんだと思うよ。
非欲張りマッチと欲張りマッチって言うとまだマシ。

正規表現エンジンの気持ちになって考える。
1. abcabc に対して /(a.*?$)/ がマッチするか試し、NG なら次
2. bcabc に対して /(a.*?$)/ がマッチするか試す、NG なら次
3. cabc に対して /(a.*?$)/ がマッチするか試す、NG なら次
4. abc に対して /(a.*?$)/ がマッチするか試す、NG なら次
5. bc に対して /(a.*?$)/ がマッチするか試す、NG なら次
6. c に対して /(a.*?$)/ がマッチするか試す、NG なら次

で、1. でいきなり成功しちゃってるから。abcabc になる。

/.*(a.*?$)/ で欲張りマッチの方に余計なもの奪わせるといいんじゃね?
正規表現なんか使わない方が速そうだけど。
783デフォルトの名無しさん:2006/01/21(土) 18:51:42
世の中はライブドアでそうぞうしいわけだが、
こうなるとPerlスレとしては小飼さんの様子が
気になるな。
784デフォルトの名無しさん:2006/01/21(土) 20:11:43
>>783
ふつーに元気そうですが。
ttp://blog.livedoor.jp/dankogai/

この間もEncodeのバージョン上げてたしねぇ。

785デフォルトの名無しさん:2006/01/21(土) 21:25:52 BE:596111696-
な、なんだってー
786デフォルトの名無しさん:2006/01/21(土) 21:34:58
ついにperl、情報処理試験のプログラム問題に出るようになりましたね^^
今パンフレット見てて気づいた。
787デフォルトの名無しさん:2006/01/21(土) 21:36:17
あげ
788デフォルトの名無しさん:2006/01/21(土) 21:37:02
教育用言語としてPerlを出すのは如何な物かと思うが……
789デフォルトの名無しさん:2006/01/21(土) 21:58:08
マジか!情報処理受けるからCやらなきゃと思ってた矢先に超ラッキー
790デフォルトの名無しさん:2006/01/21(土) 22:06:46
でも、perlは高度区分で出題されるみたい
791デフォルトの名無しさん:2006/01/21(土) 22:15:05
なんと言うか、そういう試験にいくらでも書き方があるPerlを使うのは間違ってる気がする
brainfuckとまではいかないが、言語仕様が明確で簡潔な言語を使用するべきだと思う
792デフォルトの名無しさん:2006/01/21(土) 22:17:02
Schemeだな
793デフォルトの名無しさん:2006/01/21(土) 22:18:50
>>790
あれ? 高度区分は疑似言語しか出ないんじゃなかったっけ?
プログラミング言語自体が出題されるのは第二種(今の"基本")だけだったような

まぁ、はるか昔のことなのでもう忘れたが
794デフォルトの名無しさん:2006/01/21(土) 22:45:02
>>793
僕もあまり詳しく無いんですけど、テクカルエンジニア(情報セキュリティ)試験でC++,Java,Perlが使われるみたいです。
巻末にCASLUの仕様書とPerlの仕様書が付いてます。

IPA テクカルエンジニア(情報セキュリティ)
http://www.jitec.jp/1_13download/leaflet_200509-ts.pdf
795デフォルトの名無しさん:2006/01/21(土) 22:47:51
このスレも流行っちゃいそうだな
796デフォルトの名無しさん:2006/01/21(土) 22:50:22
いい事だ
797デフォルトの名無しさん:2006/01/21(土) 23:39:22
Perlの「仕様」wwww
798デフォルトの名無しさん:2006/01/21(土) 23:40:59
試験に申し込むとラクダ本がついてくるならうれしいな。
799デフォルトの名無しさん:2006/01/21(土) 23:49:03
やべ、ラクダ本一時的に売り切れるかもしれんな
下巻今のうちに買っておこう
800デフォルトの名無しさん:2006/01/22(日) 00:13:17
あと2,3ヶ月もすると春やねぇ
801デフォルトの名無しさん:2006/01/22(日) 09:14:00
---hoge.pl---
use strict;
my $hoge = require './abc.pl';
print $hoge->{a};
------

---abc.pl---
$VAR = { a => 123, b => 456};
------

mod_perlの環境で動かすと2回目以降のアクセスで
Can't use string ("1") as a HASH ref while "strict refs" in use at hoge.pl
が出てしまいます。
これは1回目は$hogeには$VARが代入されるが2回目以降はコンパイル済みなのでrequireが1を
返すためだと思われます。
$INC{abc.pl}を意図的に消せば毎回読み直してくれますが他に良いアイディアはありませんでしょうか?
802デフォルトの名無しさん:2006/01/22(日) 09:38:09
>>801
つdo './abc.pl';
ってかrequireの戻り値はエラーが発生したかどうか調べるためのものだから、
そういう風に使うのは避けたほうがいいかと思うが
803デフォルトの名無しさん:2006/01/22(日) 10:07:22
doで解決しました。ありがとうございました。
Data::Dumperで出力した値をよくこの手法でデシリアライズしたりしていたのですが
requireだとファイルに文法エラーや存在しなかったりするとエラーになるので
doの方がいいかもしれませんね。エラー出さない方が良いのかは微妙ですけど。
このような目的では本来はData::Serializerを使うべきなんでしょうけどお手軽なので
やめれません-_-;
804デフォルトの名無しさん:2006/01/22(日) 10:17:04
それは人として正しいです
805ヽ(´ー`)ノ ◆.ogCuANUcE :2006/01/22(日) 11:54:17
普通 Storable じゃね?store/retrieve 使えば手軽だし。
806デフォルトの名無しさん:2006/01/22(日) 12:37:01
>>790
出題「この処理を実現できるモジュールを、CPANからみつけなさい」 とか
807デフォルトの名無しさん:2006/01/22(日) 13:37:54
5.8.8-RC1リリース。問題なければ今月中に正式版出るかな
ttp://use.perl.org/articles/06/01/21/1733227.shtml
808デフォルトの名無しさん:2006/01/22(日) 13:47:48
何が変わったのかしら
わくてか
809デフォルトの名無しさん:2006/01/22(日) 13:57:38
子飼氏、この間バタバタだからEncoding関係の改善は期待できんか
810デフォルトの名無しさん:2006/01/22(日) 14:43:39
>>805
時にはファイルを手で弄りたいときもあるのです。
セキュリティ・速度よりも何よりも手軽さを優先したい時はDumperが便利!
後で他のシリアライザに変更するのもそれほど手間じゃないし。
811デフォルトの名無しさん:2006/01/22(日) 21:08:48
>>809
改善って、どんな希望があるの?
812デフォルトの名無しさん:2006/01/22(日) 21:34:29
webprog板おもすれー( ^ω^)
813デフォルトの名無しさん:2006/01/23(月) 02:11:22
>>812
まぢで。おまえどのスレがおもすれー( ^ω^)のかおしえてけろよん
814デフォルトの名無しさん:2006/01/23(月) 02:13:33
#! c:/perl/bin/perl
#カウントファイルの読み込み
open(IN,"<./count.dat");
$count=<IN>;
close(IN);
++$count;
#カウントファイル書き込み
open(OUT,">./count.dat");
print OUT $count;
close(OUT);
#鯖出力
print<<END;
Content-type:text/html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head><title>アクセスカウンタ</head></title>
<body>
あなたは$count番目の訪問者
</body></html>
END








文法チェックでは通るんだが
[Mon Jan 23 02:07:40 2006] [error] [client 127.0.0.1] malformed header from script. Bad header=<!DOCTYPE HTML PUBLIC "-//W3C/: 3-3.cgi, referer: http://127.0.0.1/tendaysmyself/3-3/
ってエラーが出ます。
815デフォルトの名無しさん:2006/01/23(月) 02:25:04
Content-type:text/html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">

1行空ける
816デフォルトの名無しさん:2006/01/23(月) 02:33:24
>>813
低レベルすぎておもすれー( ^ω^)なのです
817デフォルトの名無しさん:2006/01/23(月) 03:03:51
( ^ω^)あなたもわたしもVIPPER!(^ω^ )
818デフォルトの名無しさん:2006/01/23(月) 06:53:07
>>815
ありがつございます。
ず〜っとコレで詰まってました。
助かりました。
819デフォルトの名無しさん:2006/01/23(月) 07:37:34
>>818
こういうのはPerlに関する問題じゃないから、次からはCGIの質問はWebProg板行ってくれよ。
>>1
> CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
> CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするので
> WEBプログラミング板に行って聞いたほうが得ですよ。
820デフォルトの名無しさん:2006/01/23(月) 09:11:17
perl で ビットの扱いに関する質問です。

-------
my $val = 10;
my @result = &hoge( $val );

sub hoge{
 my $val = shift;

 # 2進数に変換し、1がたっている箇所だけ10進数にして返す。
 # (例) 10 => (1010) = 2^3 + 2^1 = 8 + 2
  # return で (8,2) を Array で返したいです。

}
-------
Perlだとこういう場合どういう風にするもんなんでしょうか?
821デフォルトの名無しさん:2006/01/23(月) 09:32:04
>>820
自分が以前に作ったのはこんなん
65536 より小さい数しか扱わないことがわかってたから
for 文での開始数を 16 にしてるけど増やせばまだ大丈夫と思う

sub hoge {
  my $val = shift;
  my @ret = ();

  for (my $i = 16; $i >= 0; $i--) {
    my $power = 2 ** $i;
    if ( int ($val / $power) != 0) {
      $val %= $power;
      push (@ret, $power);
    }
  }

  return @ret;
}
もっといい方法あったら教えてください
822デフォルトの名無しさん:2006/01/23(月) 09:55:47
>>820
何に使うのか知らないけどそれ遠回りしてる気がするなあ

sub hoge {
    my $val = shift;
    my @ret = ();
    my $flag = 1;

    do{
        $val & 1 and push @ret, $flag;
        $flag <<= 1;
    }while( $val >>= 1 );
    return reverse @ret;
}
823デフォルトの名無しさん:2006/01/23(月) 10:10:54
>>822
pushしてreverseならunshiftでいいんじゃないのだろうか。
824デフォルトの名無しさん:2006/01/23(月) 10:39:21
825デフォルトの名無しさん:2006/01/23(月) 10:49:02
sub hoge($){
my $val = shift;
my @retval;
while ($val != 0){
my $ntz = $val&(-$val);
unshift @retval, $ntz;
$val -= $ntz;
}
return @retval;
}
826デフォルトの名無しさん:2006/01/23(月) 11:22:22
>>825
負の数はどうするの?
827デフォルトの名無しさん:2006/01/23(月) 12:29:08
sub hoge {
        my $val = shift;
        my $n = 2**32;
        map { $n/=2; $_ ? $n : (); } split(//,unpack("B32",pack("N",$val)));
}
828デフォルトの名無しさん:2006/01/23(月) 13:13:26
どうもこうも無いよ氏ね
829デフォルトの名無しさん:2006/01/23(月) 14:10:03
入力ストリームの一行読み込み処理で、一行の区切りを \n でなく、
%0A 区切りにして一行ずつ読込みたいのですが、
調べたら「$/」に区切り文字入れろって書いてありました。
ただ、これだと入力ストリーム全部が%0A区切り読み込みになってしまうので困ります。
ストリーム個別に読込区切り文字を指定する方法がないでしょうか?

$/='%0A'; #←ストリームを指定したいができない
print $_=<DATA>; # aiueo%0D%0Aを出力
__END__
aiueo%0D%0Akakikukeko%0D%0Asasi(ryaku
830デフォルトの名無しさん:2006/01/23(月) 14:53:16
その個別のストリームとやらを使用する前に$/に毎回入れてやればいいんじゃ
831デフォルトの名無しさん:2006/01/23(月) 15:34:52
見せてもらおうか、ストリーム前の$/の使い方とやらを!
832デフォルトの名無しさん:2006/01/23(月) 15:57:20
は?
833デフォルトの名無しさん:2006/01/23(月) 16:07:03
>>829
必要なところで local を使って代入するか、
IO::Handle->input_record_separator() を使うか。

perldoc perlvar に書いてあるサンプルを読めば、普通は思い付くと思うんだが…。
834デフォルトの名無しさん:2006/01/23(月) 16:13:33
坊やだからさ
835デフォルトの名無しさん:2006/01/23(月) 16:23:26
無駄に煽るのもこのスレの特徴、と
836デフォルトの名無しさん:2006/01/23(月) 16:27:28
お前だけだバーカ
837デフォルトの名無しさん:2006/01/23(月) 16:28:11
なんかこのスレレベル低下してる気がする
変な奴はwebprog行けよw
838デフォルトの名無しさん:2006/01/23(月) 16:32:20
>>834-839
この辺まとめてだな。俺もかよ
839デフォルトの名無しさん:2006/01/23(月) 16:40:00
さぁ殺伐としたふいんきになって参りました
840デフォルトの名無しさん:2006/01/23(月) 17:22:24
殺伐としたこのスレに珍走団が!!
       ___
       /孕/二                    パラリラパラリラ
     。 / ̄ −    。 −    。 。 。 −    __
    o孕o三     @孕@三  o孕孕孕o三  /孕/   。 −
         。 −                 / ̄ ̄    o孕o三
        o孕o三            _/ ̄ ̄\_//=3
       ___       。 −   ━┷-○ー○ー┘三
       /孕/二     o孕o三      。 −
     。 / ̄ −  。 −           @u@三     。 −
    o孕o三    o孕o三    ワーワー         @孕@三
841デフォルトの名無しさん:2006/01/23(月) 17:23:26
いやつまんないから・・・
842デフォルトの名無しさん:2006/01/23(月) 18:32:18
新宿にPerlだかpearlっていうバーがあったけどオフやるときはここでやろうぜっ!
あとプロピアもバーの近くにあるからラリーも呼んで。
843831:2006/01/23(月) 18:50:18
そろそろWebprog版へ帰ります。探さないで下さい
844 ◆TWARamEjuA :2006/01/23(月) 19:32:38 BE:3812257-
WebProg931実装キボンヌ
845デフォルトの名無しさん:2006/01/23(月) 22:02:26
俺様だけ賢いと思い込んでいる厨がいらっしゃるようでつね。
846829:2006/01/24(火) 01:50:42
>>833
キタコレ!調べてみる!サンクスおにいさん!

>perldoc perlvar に書いてあるサンプルを読めば、普通は思い付くと思うんだが…。
坊やだからさ。サンクスおにいさん!

って、あんだよ!input_record_separatorのソース見たらまんま >>830 じゃねーか
スレッドとかmod_perlとかに弱そうだったからグローバル変数での切替はイヤだったんだよ!うんこ!みたいな。

sub input_record_separator {
  my $old = new SelectSaver qualify($_[0], caller);
  my $prev = $/;
  $/ = $_[1] if @_ > 1;
  $prev;
}

このソース見る限り、ストリームごとに個別に設定は無理そうですね。
ありがとうございます。
847829:2006/01/24(火) 01:53:11
そしてWebprog版へ帰ります。行ったこと無いけど。
848デフォルトの名無しさん:2006/01/24(火) 09:30:06
>>842
そんな名前のバーは世界中にありそうな気がする。
849デフォルトの名無しさん:2006/01/24(火) 09:47:34
そんな名前の楽器会社もありそうな気がする
850デフォルトの名無しさん:2006/01/24(火) 10:01:28
こんなスレ見てないで仕事しろ
851デフォルトの名無しさん:2006/01/24(火) 10:05:15
>>850
まさに今仕事中に見ている俺に、そんな注意をするおまいは俺の上司か!?
それとも俺のディスプレイ見つめてる後ろの席の奴か!?こわいわ!
852デフォルトの名無しさん:2006/01/24(火) 18:00:55
sysopen 使って

Argument "O_RDONLY" isn't numeric in sysopen at HOGE.pl in line 31.

というエラーが出てくるのですが
O_RDONLY ってあってますよね。。。
どなたかこうなる理由に心当たりあるかたお願いします。

# HOGE.pl line 31
sysopen IN, $file, O_RDONLY, 0400 or die "Can't open '$file' : $!";
853852:2006/01/24(火) 18:13:24
『質問すると自己解決できる』の法則。。。
すみません;;
854デフォルトの名無しさん:2006/01/24(火) 19:02:48
>>852
法則?
普段からよく調べもせずに質問するからそうなる。
855デフォルトの名無しさん:2006/01/24(火) 19:26:56
>>853
> 『質問すると自己解決できる』の法則。。。
> すみません;;

質問しようとすると問題点を頭の中で整理するため、
答が見えることがあるわけです。
856デフォルトの名無しさん:2006/01/24(火) 20:10:34
>>852
use Fcntl;
857デフォルトの名無しさん:2006/01/24(火) 23:21:20
ほんとこいつらは難癖付けないと気が済まないんだなw
他人事だと思ってもイライラしてくるわw
周りから嫌われてそう
858デフォルトの名無しさん:2006/01/24(火) 23:39:49
たぶん、先輩とかにやられた過去があるんだよ。多くの人に。
最初はみんな不快だったはずだ。
が、この業界はこんなもの、と慣れてしまった。
そして同じ事を平気でするようになる。
859デフォルトの名無しさん:2006/01/24(火) 23:42:04
>>857
>>746の人? それも難癖のような気が。
860デフォルトの名無しさん:2006/01/24(火) 23:50:50

任意の10進数を16 bitの二進数データに変換したい場合について質問させてください。
下のように記述しても、何故か8bit分の文字列しか帰ってきません。
お手数ですが御教授頂けないでしょうか。


$data = 72;
$out_data=unpack("B16",pack("C*",$data));

$out_dataに、"0000000001001000"が戻ってくることを
期待しますが、"01001000"が戻ってきます。
861デフォルトの名無しさん:2006/01/24(火) 23:53:52
>>858
なるほど

>>859
チガウヨ
862デフォルトの名無しさん:2006/01/25(水) 00:42:24
>>860
pack() の型指定子に 'C' 使ってるから

$out_data = unpack("B16", pack("s*", $data));

以下、perlfunc から引用

s A signed short value.
S An unsigned short value.
 (This 'short' is _exactly_ 16 bits, which may differ from
  what a local C compiler calls 'short'. If you want
  native-length shorts, use the '!' suffix.)
863デフォルトの名無しさん:2006/01/25(水) 01:56:16
>>863

御教授ありがとうございます。
重ねて質問をよろしいでしょうか。

教えて頂いた方法で、例えば
"$out_data = unpack("B16", pack("s*", 511)); "
10進"511"は、2進"111111111"(1x9個)ですので、
出力が

で、実行してみますと、
"1111111100000001"が出力されます。そこで、教えて頂いた事と
エンディアンを考慮してpack()の型数に"n"を使用してみました。
"$out_data = unpack("B16", pack("n*", 511)); "

すると出力は"0000000111111111"となり、所望の結果となりました。
ですが、今度は24bit"000000000000000111111111"で出力させようと思い、
"$out_data = unpack("B16", pack("N*", 511)); "
で実行すると、"000000000000000000000001"と出力されてしまいます。

これを,"000000000000000111111111"と出力させるには如何したらよろしいでしょうか。
御多忙の折に申し訳ありませんが、御教授頂けましたら幸いです。よろしくお願いいたします。
864デフォルトの名無しさん:2006/01/25(水) 01:58:46
>>860 = 863 です。以下、訂正です。

>> 862 様

御教授ありがとうございます。
重ねて質問をよろしいでしょうか。

教えて頂いた方法で、例えば
"$out_data = unpack("B16", pack("s*", 511)); "
10進"511"は、2進"111111111"(1x9個)ですので、
出力がは"0000000111111111"を期待します。

で、実行してみますと、
"1111111100000001"が出力されます。そこで、教えて頂いた事と
エンディアンを考慮してpack()の型数に"n"を使用してみました。
"$out_data = unpack("B16", pack("n*", 511)); "

すると出力は"0000000111111111"となり、所望の結果となりました。
ですが、今度は24bit"000000000000000111111111"で出力させようと思い、
"$out_data = unpack("B16", pack("N*", 511)); "
で実行すると、"000000000000000000000001"と出力されてしまいます。

これを,"000000000000000111111111"と出力させるには如何したらよろしいでしょうか。
御多忙の折に申し訳ありませんが、御教授頂けましたら幸いです。よろしくお願いいたします。
865デフォルトの名無しさん:2006/01/25(水) 02:32:30
substr(unpack('B*', pack('N', 511)), 8)
但しNが32ビットである場合のみ有効。
N は big-endian で unsigned long ということは保障されていても
unsigned long が 32 ビットであることは保障されていない。

866デフォルトの名無しさん:2006/01/25(水) 04:03:37
$data = 72;
$bit = 24; #表示させたいビット数
foreach(1..$bit){
    if($data & 1 << $bit - $_){
        print "1";
    }
    else{
        print "0";
    }
}

これじゃだめか?
867デフォルトの名無しさん:2006/01/25(水) 09:12:07
Perlで書かれたHTTPDってどこかにありますか?
inetdから起動される簡単なものでいいんですが・・・
868デフォルトの名無しさん:2006/01/25(水) 09:19:14
>>865
いつからかはわからないですが今は32bitであることが保証されています。
5.8.7のperlfunc(1)のpackの項から抜き出したものですが、最後のカッコ内
に注目。

n An unsigned short in "network" (big-endian) order.
N An unsigned long in "network" (big-endian) order.
v An unsigned short in "VAX" (little-endian) order.
V An unsigned long in "VAX" (little-endian) order.
(These 'shorts' and 'longs' are _exactly_ 16 bits and
_exactly_ 32 bits, respectively.)

869ヽ(´ー`)ノ ◆.ogCuANUcE :2006/01/25(水) 09:33:36
>>867
> Perlで書かれたHTTPDってどこかにありますか?
HTTP::Daemon とか。

> inetdから起動される簡単なものでいいんですが・・・
こっちはしらね。
870デフォルトの名無しさん:2006/01/25(水) 10:12:50
>>868
あ、本当だ。32ビットは保証されていたのか。
やっぱ互換性を保ちたいということかな。
(そういや昔は Perl バージョンアップしたら
動かなくなるスクリプトあったな…)
871デフォルトの名無しさん:2006/01/25(水) 10:32:30
>>869
ローカルのドキュメントを表示するだけのものが欲しかったんですが、
これだけでOKでした・・・

#!/usr/local/bin/perl
$METHOD=<STDIN>;
$PATH=$1 if $METHOD=~/GET (.+) HTTP/;
if(! -f $PATH){exit}
undef $/;
open FH,"$PATH";
$document=<FH>;
close FH;
print STDOUT $document;

これと/etc/inetd.confに下の一行を追加して、
http stream tcp nowait root /home/junya/bin/httpd.pl httpd.pl

ブラウザからこんな感じで
http://localhost:80/usr/share/doc/...

つか、これならシェルで十分すね・・・
872ヽ(´ー`)ノ ◆.ogCuANUcE :2006/01/25(水) 11:06:50
>>871
それ、
"GET /etc/passwd HTTP/1.1"
とか送り付けられたらヤバくね?
873デフォルトの名無しさん:2006/01/25(水) 11:16:17
>>872
/etc/hosts.allow,/etc/hosts.denyで規制してるし、どうせローカルでしか使わないし。
でもあんまり良くないかな。
874デフォルトの名無しさん:2006/01/25(水) 11:54:54
>>860
>任意の10進数を16 bitの二進数データに変換したい場合について質問させてください。

sprintfを使え。
つーか、これまでそう言った人がいないのは、どうしたわけだろうか?
875デフォルトの名無しさん:2006/01/25(水) 12:04:44
>>874
「○進数を×進数に…」の質問は散々既出なので、sprintf の %b を
知ってる間は質問を読みもしない。
876デフォルトの名無しさん:2006/01/25(水) 12:54:56
すみません教えてください

setenv CLASSPATH…
が羅列されたcshファイルを
シェルのsourceのように
perlの中から読み込んで、環境変数CLASSPATHに設定すること
は出来ますか?
877デフォルトの名無しさん:2006/01/25(水) 13:22:20
878デフォルトの名無しさん:2006/01/25(水) 13:36:13
>>876
$ENV{CLASSPATH} = `csh -c 'source $csh_file >/dev/null ; echo -n \$CLASSPATH'`;
879デフォルトの名無しさん:2006/01/25(水) 13:49:20
出来ました!
ありがとう!

先ほどsage忘れました、ごめんなさい
880デフォルトの名無しさん:2006/01/25(水) 20:49:29
Perl初心者です
UNIXコマンドでのwc -lのようにファイルの中の行数を
出力するにはPerlでどうすればできますか?
881デフォルトの名無しさん:2006/01/25(水) 20:54:09

>Perl初心者です

あっそ、だから何
882デフォルトの名無しさん:2006/01/25(水) 21:01:39
>>880
print `wc -l foo.txt`;
883デフォルトの名無しさん:2006/01/25(水) 21:10:22
人間としての器の差だなw
884デフォルトの名無しさん:2006/01/25(水) 22:04:53
>>880
ファイルを開いて
open my $fh, 'file' or die "Can't open file: $!";

後は数える。
my $c = 0;
$c++ while <$fh>;

富豪的解法
my $c = scalar @{[ <$fh> ]};

閉じるのをお忘れなく
close $fh;

おまけのワンライナー
perl -ne 'END { print $. }' < file

>>881
「初心者」を振りかざして免罪符にしようとするのであれば確かにそれは間違っているが、
あまり詳しくないことを初めに言っておくことは質問方法として重要なことだと思うが?
まあこの場合は質問内容からそれが解るし、自らはどのようにやってみた等が欠けてはいるけど。
この回答でも「Perl初心者です」という一言があるからこそ、
ファイルの開き方を軽く説明しているつもりだし。
885デフォルトの名無しさん:2006/01/25(水) 22:22:13
>>881
は、人生の初心者でした。
886デフォルトの名無しさん:2006/01/25(水) 22:25:02
( ´д)ヒソ(´д`)ヒソ(д` )
887デフォルトの名無しさん:2006/01/25(水) 23:07:19
もうこのスレwebprogと併合しろよ
888デフォルトの名無しさん:2006/01/25(水) 23:08:05
5.9.3はいつでるの?
889860:2006/01/25(水) 23:08:21
865,866,874様

御教授ありがとうございました。
sprintfに "b"があるとは知りませんでした。

866様の例も勉強になりました。
大変ありがとうございました。
890デフォルトの名無しさん:2006/01/25(水) 23:11:04
>>884に同意。
何かこのスレ潰そうってかperlを貶めようってかしてる椰子が
1個流れてるな。
891860:2006/01/25(水) 23:14:07
・・・。










>>」881
氏ねや ゴミはよ!
892デフォルトの名無しさん:2006/01/25(水) 23:14:47
>>872
phfを思い出した
893デフォルトの名無しさん:2006/01/25(水) 23:56:47
ぎゃっはっは
初心者を煽るのを含めて楽しもうぜ
894デフォルトの名無しさん:2006/01/26(木) 01:24:05
VIPでやれ
895デフォルトの名無しさん:2006/01/26(木) 01:31:43
vip以外でvipでやれっていうの始めてみた
896デフォルトの名無しさん:2006/01/26(木) 05:30:04
まんこぉー
897デフォルトの名無しさん:2006/01/26(木) 05:53:23
何なんだこの荒れようは…
898デフォルトの名無しさん:2006/01/26(木) 07:55:42
WebProgのPerl貶しスレ辺りから変なのが沸いてきたんじゃないかな。
長い間いい感じで進行してたのに残念ですな。
899デフォルトの名無しさん:2006/01/26(木) 13:13:29
なんでもかんでもWebProg板のせいにする奴が出てきてから荒れてきた
900デフォルトの名無しさん:2006/01/26(木) 14:16:35
その前に難癖厨が・・
901デフォルトの名無しさん:2006/01/26(木) 14:40:25
一部残っていた卵がふ化したんだろう
902デフォルトの名無しさん:2006/01/26(木) 17:06:37
hashを書いたファイルを作成して、requireで読み込んでそのまま使おうとしています。

---------------------
・ファイルの中身
%s=('id',q(1),'name',q(40),'logouttime',q(2006-01-26 15:38:36),'m',q(1),'rowsize',q(10),'s',q(7f02f000320007d0106a));
---------------------
・ソース
if (ろぐいんok) {
 require ふぁいる;
 %mainhash = %s;
}
---------------------

普通に使えていたのですが、use strictを入れたらフォーカスがあいまい?だと怒られた為、
---------------------
・ソース
if (ろぐいんok) {
 my %s;
 require ふぁいる;
 %mainhash = %s;
}
---------------------
のようにしたのですが、これですとエラーは出なくなるのですが、
my %sとrequire内の%sが別扱いになってしまうのか、hashが空で読み込まれるようになってしまいました。

requireを使う前提で、なにか解決策などありますでしょうか。
ファイルのデータ構造を変えて普通にファイルとして読み込んでからハッシュに格納するようにすればいいんでしょうが、
こういう使い方ができないのかどうか激しく疑問です。。

以上、ご教授よろしくお願いします。
903デフォルトの名無しさん:2006/01/26(木) 17:35:01
>>902
our %s=〜 で明示的にグローバルにするか、
ハッシュの中身を返すサブルーチンに替える。
904デフォルトの名無しさん:2006/01/26(木) 17:56:45
>>902
 %mainhash = require ふぁいる;
っていけないのかな?
試してないけど。
905デフォルトの名無しさん:2006/01/26(木) 18:04:21
>>902
この場合は require を使う方が面倒が起きるんだけどな。
http://www.kt.rim.or.jp/~kbk/perl-5.8/perlfaq8.html#what_s_the_difference_between_require_and_use

---------------------
・ファイルの中身
{'id',q(1),'name',q(40),'logouttime',q(2006-01-26 15:38:36),'m',q(1),'rowsize',q(10),'s',q(7f02f000320007d0106a)};
---------------------
・ソース
if (ろぐいんok) {
  my %mainhash = %{ do ふぁいる };
}
---------------------
906デフォルトの名無しさん:2006/01/26(木) 18:07:58
>>903
ありがとうございます。
ourは気持ちわるいっすね。。
サブルーチンに変えるというのはこういう解釈で問題ないでしょうか。
---------------------
・ファイルの中身
sub fileread() {%s=('id',q(1),'name',q(40),'logouttime',q(2006-01-26 15:38:36),'m',q(1),'rowsize',q(10),'s',q(7f02f000320007d0106a));}
---------------------

>>904
それは試したんですが、無理でしたです。
すみません、説明不足でした。
907デフォルトの名無しさん:2006/01/26(木) 18:21:14
>>906
訂正
---------------------
・ファイルの中身
sub fileread() {my %s; %s=('id',q(1),'name',q(40),'logouttime',q(2006-01-26 15:38:36),'m',q(1),'rowsize',q(10),'s',q(7f02f000320007d0106a)); return %s;}

>>905
ありがとうございます、できました!
動いてた頃よりもソースが美しいっす!


>>903-905
ありがとうございました。
908デフォルトの名無しさん:2006/01/26(木) 18:21:59
our より、
> hashを書いたファイルを作成して、requireで読み込んでそのまま使おうとしています。
の方がキモいけどなぁ。
909デフォルトの名無しさん:2006/01/26(木) 18:39:11
Visual Perlってもう手に入らないんですか?
インストーラ自体はFTPにあったのですが、インストールしても
ライセンスがないというダイアログが出てはじかれてしまうんですよ。
オフィシャルの
b) provide unlimited licenses for the current 2003/2002 plug-ins;
ってのはKomodoのライセンス持ってる人にだけってことでしょうか?
910デフォルトの名無しさん:2006/01/26(木) 19:18:16
Perlなんてエディタで書けよ・・・
911デフォルトの名無しさん:2006/01/26(木) 19:53:49
TMTOWTDI
912デフォルトの名無しさん:2006/01/26(木) 21:02:13
すいません、質問です。
ある2つの配列のハッシュ(%A, %B)で、各 key に対する値が、A, B ともに
あったら、それを A から削除したいのですが、よい方法ありますでしょうか。

今、思いつくのはこんな感じです・・・
foreach $key ( keys %A ) {
foreach $i ( 0 .. $#{ $A{$key} } ) {
if ($A{$key}[$i] = $B{$key}[$i]) {
ここで削除処理 ?
}
}
}



913デフォルトの名無しさん:2006/01/26(木) 21:18:25
delete $A{$_} for keys %B; とか?
914912:2006/01/26(木) 21:24:40
>>913
ありがとうございます。
でも、それだと、key ごと消えちゃったりしますよね。

key に対する重複する値だけ消したいっす。

915デフォルトの名無しさん:2006/01/26(木) 23:09:14
deleteのかわりにundefにしたら?
916913:2006/01/26(木) 23:36:23
>>914
あ、すまんす。値が配列になってるのね。ちょっとうまい方法が思いつかないなあ。
917デフォルトの名無しさん:2006/01/27(金) 00:45:38
>>912
そういう時は一旦ハッシュに入れてみるのが常套手段
my %A = ( hoge => [1, 2, 3, 5], fuga => [50] );
my %B = ( hoge => [2, 3, 4], piyo => [] );

foreach my $key (keys %B) {
next if !exists $A{$key};

my %e = ();
$e{$_} = 1 foreach @{$B{$key}};

my @newA = ();
$e{$_} or push @newA, $_ foreach @{$A{$key}};

$A{$key} = \@newA;
}
918デフォルトの名無しさん:2006/01/27(金) 01:03:08
>>912
通りすがりの初心者です。間違っていたら指摘よろです。

foreach my $key(keys %B){
$A{$key} = [undef] if($A{$key} != undef);
}
919918:2006/01/27(金) 01:09:03
連書きすいません。

$A{$key}=[undef]
じゃなくて
$A{$key}=[]
でした。
920デフォルトの名無しさん:2006/01/27(金) 01:18:24
>>918
仕様が要件を満たしているかどうかは置いておくとして、
$A{$key} != undefの所はdefined $A{$key};と書かないと。
-wやuse warningsを使うと、そういうことを結構教えてくれるから使ってみることをお勧めする。
921デフォルトの名無しさん:2006/01/27(金) 01:49:36
while (my $key = each(%A)) {
 if (exists($B{$key}) {
  delete($A{$key});
 }
}
922デフォルトの名無しさん:2006/01/27(金) 04:11:30
>>921
each の途中で、delete ってしていいの?
923デフォルトの名無しさん:2006/01/27(金) 06:02:28
(・∀・)イイ!!わけない
924912:2006/01/27(金) 07:09:21
>>912 です。
みなさん、ご助言ありがとうございます。
昼間に試してみて、夜にでも結果報告をします。
感謝感謝です。
925デフォルトの名無しさん:2006/01/27(金) 09:15:38
>>922
一般にはダメだが、eachが最も最近に返した要素のdeleteだけは
安全。perlfunc(1)のeachのとこに書いてある。

If you add or delete elements of a hash while you're
iterating over it, you may get entries skipped or duplicated,
so don't. Exception: It is always safe to delete the item most
recently returned by "each()", which means that the following
code will work:

while (($key, $value) = each %hash) {
print $key, "\n";
delete $hash{$key}; # This is safe
}
926デフォルトの名無しさん:2006/01/27(金) 10:40:20

$ perl hoge.pl -i input_file
または
$ perl hoge.pl < input_file
のように使うスクリプトがあって
引数に -i があるときはファイルを開いて
無いときはSTDINからデータを読んでるのですが

$ perl hoge.pl

とどちらも忘れたときにSTDINで止まってしまって
強制終了以外で止められません

$ perl hoge.pl[enter]
I can't find input file!
$

のようにする方法をずっと考えているのですが
結局思いつきません。。。
どなたかいい方法をお願いします。
927デフォルトの名無しさん:2006/01/27(金) 11:23:16
>>926
よく使われる手は -t STDIN で標準入力がttyかどうか調べる、だな。

リダイレクトで明示的にttyを標準入力につないだときに誤判定するが
それはアキラメで。
928デフォルトの名無しさん:2006/01/27(金) 11:23:46
>926
STDINが、コンソールか、ファイルかなんて、
C言語でも、かなりOSに依存したコード書かないといけないと思うからperlだと難しいんじゃないかな。

一応、seek(STDIN,0,0) してみたら、
コンソールの場合は、0が返ってきて、
ファイルの場合は、1が返ってきたので、
これで判断できると思うけどOSに依存するかもしれん。
929928:2006/01/27(金) 11:26:16
>>927
http://flex.ee.uec.ac.jp/texi/perl/perl_22.html#IDX82
-t ファイルハンドルが tty にオープンされている
こんなファイルテスト演算子があったとはしらんかった (;゚д゚)...
930928:2006/01/27(金) 11:34:10
package が存在する(定義されている)か判定する方法がないでしょうか?

print "defined PackageName" if defined(PackageName);

↑でできるかなと思ったのですが、
defined("PackageName")としていることが
まったく同じような気がするので常に1が返ってきて無駄でした。
931デフォルトの名無しさん:2006/01/27(金) 11:48:37
>>926
馬鹿だなオマエ。そういう時は「引数に何も付けなかった時は
標準入力から入力する。」という仕様にしてしまえばいいじゃ
ないか。実際その方が便利だぞ。
932926:2006/01/27(金) 11:51:25
>>927
-t STDIN
を利用して

$ perl hoge.pl -i input_file
$ perl hoge.pl < input_file
$ cat input_file | perl hoge.pl

で期待通りに動作しました!ありがとうございます!
それと
『リダイレクトで明示的にttyを標準入力につないだとき』
なのですが、というのが分かりません。。。
どういうことでしょうか。。。?
933926:2006/01/27(金) 11:53:42
>>931
あ、本来の仕様は
perl [-i input_file] [-o out_putfile]
なんでそれは無理です。
質問のために省略しました。
ただ、その方法も確かに簡単でいいですね!
934デフォルトの名無しさん:2006/01/27(金) 12:05:01
とりあえずここで・・・ (*Windows版)

紫色を透明色にしたいんだが何か間違ってる?

use Image::Magick;

$image = Image::Magick->new;
$image->Read('test.bmp');

 $image->Set(transparent=>'Purple');
 $image->Set(colorspace=>'Transparent');
 $image->Set(matte=>'True');

$image->Write("test.png");
935デフォルトの名無しさん:2006/01/27(金) 13:27:07
>>932
$ perl hoge.pl < /dev/tty
936デフォルトの名無しさん:2006/01/27(金) 14:55:44
>>934
1. ○○がしたい
2. 自分はこうやった
3. 結果は××になってほしいが△△になってしまった

3 が抜けてて返答のしようがない。
937デフォルトの名無しさん:2006/01/27(金) 16:21:59
ppmでHTML-FormatTextが見つからないのですが、
CPANで拾うとppdが入っていません。かなりググりましたが他に
見つかりませんでした。
自動でインストールできるものはどこで入手できますでしょうか?

あと、みなさん普段どこからモジュールを手に入れてますか?
オススメのリポジトリとかあれば教えてください。
938デフォルトの名無しさん:2006/01/27(金) 16:51:40
ppm とか ppd って何?

cpan -i HTML::FormatText で普通に入るけど。
939デフォルトの名無しさん:2006/01/27(金) 17:27:58
Active Perl5.86で既になかった
古い5.81ので拾った記憶が
既に入らなかった。あきらめたけど
ppmでオフラインで入らないのは古いから対応してないよ警告なんだと思う。

namazuでもそうだったし
野良で使えるとは思うけど

もしかしたらアーカイブ鯖からppmで入れられるのかね?
5.81アーカイブに繋いで入れられるのかな?

不明
940937:2006/01/27(金) 20:23:47
ありがとうございます。CPANでインストールできました。
こんなのがあったんですね・・・(ppmの立場は!?)
いままでppmを使っていたので、モジュールのインストールによく躓いていました。
perlのモジュールって,統一感がある様で結構バラバラな感じですね。
Image::Magickもppmでは入りません。DLLのインストーラでオプション指定
しないといけない現状です。
ウエブにあふれてる解説が古いままなのが、躓く原因だと思います。
941デフォルトの名無しさん:2006/01/27(金) 21:01:05
お前は何を言っているんだ?(画像ry
942デフォルトの名無しさん:2006/01/27(金) 21:59:14
>>940
> ppmの立場は!?
ActivePerlで確実に使えるパッケージである。
コンパイル済みなので、コンパイラを持っていないユーザーでも使える。
943デフォルトの名無しさん:2006/01/27(金) 22:07:57
小飼弾て朝生に出てるんだな。今知ったよ。
944デフォルトの名無しさん:2006/01/27(金) 22:51:06
な、なんだってー
またでんのかよ
945デフォルトの名無しさん:2006/01/27(金) 23:21:31
さて、情報処理申し込みにオフィシャル行ってくっか
946デフォルトの名無しさん:2006/01/28(土) 04:23:46
@list=glob("*.c");
$val=$list[$#list]

これを一文でやる方法はありますか?
あるリストの最後の要素を取得する方法が知りたいです。
947デフォルトの名無しさん:2006/01/28(土) 05:03:24
サンプルなどで
foreach my $key( @list) {
print "$key", "\n";
}
という書き方がよく行われていますが

my $key;
foreach $key( @list) {
print "$key", "\n";
}

とすべきではないのでしょうか?
948デフォルトの名無しさん:2006/01/28(土) 05:09:08
ヒント:

foreach my $key( @list) {
print "$key", "\n";
}
print "$key", "\n";


my $key;
foreach $key( @list) {
print "$key", "\n";
}
print "$key", "\n";
949デフォルトの名無しさん:2006/01/28(土) 05:11:13
>>946
$val=[glob("*.c")]->[-1];
とか?
950デフォルトの名無しさん:2006/01/28(土) 05:15:29
>>946
便乗しての質問なのですが、なぜ
@list=glob("*.c");
$val = pop(@list);

は出来るのに

@list = pop(glob("*.c"));

はType of arg 1 to pop must be array (not null operation) というコンパイル
エラーになってしまうのでしょうか?
951ヽ(´ー`)ノ ◆.ogCuANUcE :2006/01/28(土) 05:23:06
>>946
こうじゃね?

$val=(@list = <*.c>)[-1];

もっとも、俺なら後から見てワケワカメになるので、こうするけどな。

my @list = <*.c>;
my $val = $list[-1];

あと、deprecated というわけじゃないようだが、glob() じゃなくて
File::Glob か <> 演算子を使っとけ。

>>950
pop() は引数を与えた場合、与えられた配列を変更するので、変更できない
(lvalue じゃない) サブルーチンの返り値やリテラルを渡すとエラーになる。
952デフォルトの名無しさん:2006/01/28(土) 05:42:23
[-1]が使えたんですね。アリガトウございます.
953デフォルトの名無しさん:2006/01/28(土) 06:09:16
unlink (sort glob "*.c")[-1];

ところでこのソートって必要だと思いますか?
>as the standard Unix shell /bin/csh would do.
/bin/cshはファイル名でソートしてくれる仕様なのかな、どうなんだろ。
954デフォルトの名無しさん:2006/01/28(土) 06:11:46
unlink +(sort glob "*.c")[-1];
こうだった。
955デフォルトの名無しさん:2006/01/28(土) 10:02:58
>951
>あと、deprecated というわけじゃないようだが、glob() じゃなくて
>File::Glob か <> 演算子を使っとけ。

なんで?
956デフォルトの名無しさん:2006/01/28(土) 11:55:08
>>955
少なくとも 5.6.0 から組込関数の glob() は内部で File::Glob 呼んでるし、
ファイル名グロブ演算子としての <> は行入力演算子としての <> と紛ら
わしいうえ実体は glob() だから、「glob() より <> を使え」って根拠は謎だな。
http://search.cpan.org/~nwclark/perl-5.8.7/pod/perlfunc.pod#glob_EXPR

まぁ File::Glob::bsd_glob() を直接使えばフラグを与えて細かく制御できるし、
そういう事を言いたいんじゃない? 俺は面倒だから glob() 使うけど。

>>953-954
という事で File::Glob を読むんだ。
http://search.cpan.org/~nwclark/perl-5.8.7/ext/File/Glob/Glob.pm
957ヽ(´ー`)ノ ◆.ogCuANUcE :2006/01/28(土) 12:38:34
>>956
File::Glob の方が細かく制御できるから…と思ったけど、
:globally なら glob() にも <> にも影響あるんだな。
これはスマンカッタ。

>>953-954
unlink() かよ。
958デフォルトの名無しさん:2006/01/28(土) 13:35:54
すみません
Windowsで言う『切り取り→貼り付け』、UNIXで言う『mvコマンド』みたいな事をしたいんですが
モジュールとかありますか?
959デフォルトの名無しさん:2006/01/28(土) 13:45:54
>>958
モジュールって…
rename() でええがな。
960デフォルトの名無しさん:2006/01/28(土) 13:51:37
>>958
あえてモジュールを使いたいならFile::Copyにmvがある。rename直でいいと思うが。
ところでこのスレでPerl6の質問ってしてもOK?
まだ質問があるわけじゃないんだけどさ
961デフォルトの名無しさん:2006/01/28(土) 13:51:46
ファイルをポインタで扱いたいんですが、
ttp://www.rfs.jp/sb/perl/02/08.html#TRY!%20ファイルハンドルを変数に格納する
↑以外で良いサンプルの書いてあるサイトを知ってる人いませんか。

ポイントへの格納の仕方、読み方の二つがわかれば十分なんですが…
962デフォルトの名無しさん:2006/01/28(土) 14:04:48
ポインタって?
963デフォルトの名無しさん:2006/01/28(土) 14:09:24
964デフォルトの名無しさん:2006/01/28(土) 14:34:40
>>963
ありがとうございました!

>>962
すみません、どう表現したらいいのかもよくわかってなくてニュアンスで書きました。
965デフォルトの名無しさん:2006/01/28(土) 16:26:45
>>960
ここいってくらさい。
次世代Webプログラミング言語の大本命Perl6/Parrot [WebProg]
966デフォルトの名無しさん:2006/01/28(土) 21:35:32
Jcode.pmの
[@match = ] $j->m($pattern, $opt);
を使って、以下1行のSJIS文
あいうえお/かきくけこ/さしすせそ
を/でsplitするにはどうしたらいい?
967デフォルトの名無しさん:2006/01/28(土) 23:45:42
>>959
>>960
renameは同一ファイルシステム内でしか移動できないので、
ファイルシステムまたぐ可能性があるならFile::Copyのmvを
使うべし
968デフォルトの名無しさん:2006/01/29(日) 00:54:03
my @list;
my $rec = {
title => '11',
genre => '77',
};
push(@list, \$rec);
&test(\@list);

sub test(\@) {
my ($lst) = @_;
foreach my $aaa (@$lst) {
# ここでデリファレンスする方法をおしえてください。
print $aaa->{title};
}
}
よろしくお願いします。
969デフォルトの名無しさん:2006/01/29(日) 01:26:01
print %$aaa->{title};
970デフォルトの名無しさん:2006/01/29(日) 01:30:58
ハッシュのリファレンスのリファレンスをpushしてしまってるから
push(@list,\$rec) を push(@list,$rec) にするとかは?
971960:2006/01/29(日) 01:36:31
>>965
りょーかいです

>>967
ファイルシステムを超えて移動したことなかったので知らなかったorz
やっぱり一般的な関数もちゃんとドキュメントは読まないと駄目ね・・・

>>968
>>969 書き間違えてますぞい。
print $$aaa->{title};
972デフォルトの名無しさん:2006/01/29(日) 01:39:28
それだとNot a HASH reference といわれてしまうのですが・・・
973968:2006/01/29(日) 01:45:57
ありがとうございます。print $$aaa->{title}; で表示できました。

my @list;
my $rec = {
title => '11',
genre => '77',
};
push(@list, \$rec);
これ「ハッシュのリファレンスのリファレンス」になってしまうのでしょうか?
974968:2006/01/29(日) 01:51:43
理解できました。ありがとうございました。
975969:2006/01/29(日) 02:17:19
おいちょっと待て、
print $$aaa->{title};
これだと
Not a SCALAR reference
になるんだが
976969:2006/01/29(日) 02:18:31
俺の勘違いだったすまん
977デフォルトの名無しさん:2006/01/29(日) 05:01:05
リファレンスのリファレンスって何か嬉しいことあるの?
978デフォルトの名無しさん:2006/01/29(日) 06:31:54
>>967
Winの場合は、rename で内蔵HDDから外付けUSB HDDに移動できたけどな。
979 ◆TWARamEjuA :2006/01/29(日) 06:41:57
え?
980デフォルトの名無しさん:2006/01/29(日) 07:09:22
>>978
それはファイルシステムとは言わないような気がするんだけど気のせい?
981デフォルトの名無しさん:2006/01/29(日) 07:10:07
>>980
はぁ?
982デフォルトの名無しさん:2006/01/29(日) 07:16:47
>>981
アホみたいに煽るだけじゃなくて実のあること書いてよw
FATとかNTFSのことじゃないの?
983デフォルトの名無しさん:2006/01/29(日) 08:32:27
うちでもやってみた。(内蔵IDE HDD→外付けUSB HDDへの rename)
Linux Perl の場合:無効なクロスデバイスリンク と出て失敗。
Win98SE(ActivePerl)の場合:正常に移動できた。

デュアルブートのマシンなので、ハードウェアは全く同じ環境。
誰か理由を説明できる人、よろしく。
984デフォルトの名無しさん:2006/01/29(日) 08:35:05
内部で使ってる関数が違うだけの話じゃないの?
985デフォルトの名無しさん:2006/01/29(日) 08:53:07
windowsは知らんけど、linuxとかのmvもデバイスをまたぐ時は
内部でcpとrmを実行してなかった?
986デフォルトの名無しさん:2006/01/29(日) 09:22:05
Linux-2.4,Glibc-2.3.5で試したけど、
mvで違うファイルシステムにファイルを移動しようとしたら、
renameでエラーを検出した後に、read/writeでファイルをコピーしてる。
987デフォルトの名無しさん:2006/01/29(日) 09:27:05
>>985
その通り。
まず rename を試み、失敗したら自分で移動処理してる。
ActivePerlのrenameは、そういうコードが入ってるってことかな?
988デフォルトの名無しさん:2006/01/29(日) 09:39:52
rename(2)とMoveFileExの挙動違いじゃないのかな。
Windowsの関数の方が親切だよね。
989デフォルトの名無しさん:2006/01/29(日) 09:45:00
MoveFileExじゃない、ただのMoveFileか。
MoveFileExならフラグの制御でUNIXと同じ動作にも
出来たんだろうけど、あえてMoveFileを使う辺りが適当というか。
ユーザーにとっては便利だけど。
990デフォルトの名無しさん:2006/01/29(日) 09:56:30
>>989
Win9xでも動くようにするためじゃない?
991デフォルトの名無しさん:2006/01/29(日) 10:03:21
>>990
MoveFileExってNT系にしかないのか…
992デフォルトの名無しさん:2006/01/29(日) 10:16:34
朝っぱらから小飼弾の喋りはつらいですね
993デフォルトの名無しさん:2006/01/29(日) 10:17:34
誤爆した
994デフォルトの名無しさん:2006/01/29(日) 16:19:14
もう次スレの時期か…また立ててくる
995デフォルトの名無しさん:2006/01/29(日) 16:26:45
my $$self{next} = new BBS2ch::Thread 'Perlについての質問箱 22箱目';

次スレ
http://pc8.2ch.net/test/read.cgi/tech/1138519327/
996デフォルトの名無しさん:2006/01/29(日) 16:56:43
>>995
z
997デフォルトの名無しさん:2006/01/29(日) 17:11:49
ふふっ、くすぐったいですか?
それは、すみません。 でも、ゆっくり味わいたいと思います
(身をよじるはやてに微笑をむけながら)

ふふ、可愛らしいですね……、大人になったらするんですから……
はやてちゃんの場合でしたら、したいって相手がいっぱい居ると思いますよ?
ですから、あまり恥ずかしがらないでくださいね。
(そう話しかけながら、胸の蕾を指で転がしている)

ん、ふ……ちゅ、ぺろぺろ……
(乳房の輪郭を、手で探りながら、胸の蕾を舌先で転がす)
ふふ、どうですか……?
んちゅ……、ちゅ……
(はやての身体に跨り、首筋に顔を伸ばして唇を這わせる)
998デフォルトの名無しさん:2006/01/29(日) 17:11:58
んふ………っ
(ペニスが下腹部に当たると、身体を浮かして)
もう、したいんですか……?ふふ、まだ早いですよ。
(はやてちゃんの胸を揉みながら、微笑む)
んふっ……ぺろっ……
(胸から鎖骨へとゆっくり舌を這わせながら、身体を浮かす)

それでは、私のを、はやてちゃんの唾液で濡らしていただけますか?
(そう言うと、69の体勢になるため、お尻をはやてへ向け
 身体をペニスの方へと寝かせていく)
………………
(ペニスを掴んで扱きながら、はやてからの愛撫を待っている)
999デフォルトの名無しさん:2006/01/29(日) 17:12:07
ひぃぅん……あっ……ん……
(ペニスを扱かれて、腰が動く)
シャマル………うち…頑張る……
ちゅ……ん……
(ペニスへの刺激に耐えながら、懸命にシャマルのアソコをチロチロ舐める)
1000デフォルトの名無しさん:2006/01/29(日) 17:12:13
ふふ、腰が動いてますよ、気持ち良いですか…?
ぁん……、はい、頑張ってくださいね……
ちゅ……ん…、ちゅっ……
(嬉しそうに腰を振りながら、
ペニスの先端を舌先でくすぐる)
ふぁ……ぁ、ん………
(秘部をはやての唾液を、自分の愛液で濡らしながら、腰を揺らす)
ちゅ、ぺろ……ふ、ぁ……
(咥内にペニスを含み、ペニス全体に舌を絡め唾液で濡らす)

ふふ、これは、どうでしょうか……
(上半身を軽く浮かし、はやてのペニスを豊満な胸で挟む)
(そして、挟んだまま胸でペニス扱く)
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。