756 :
クロエ :
2006/01/21(土) 00:00:14 【1】@〜Mまでユーザーが任意に入力した数値を総計 【2】☆・△・■ ユーザーが任意入力した3つの数値を総計 【2】÷【1】を結果として表示 以上の様なCGIをプログラミングしてもらおうと、代行屋さんに見積もりしてもらいました。17000円との事でしたが、普通のお値段でしょうか?カモられていないか心配ですw
え、オチは?
一ヶ月20日として、一人月50万なら、 一日2.5万円。 半日で1.75万円。 まぁ妥当なとこじゃねーの?
桁を一つ間違えているのかと思ったよ。
>>756 のような頭の足りない人間の相手をしなきゃならんし。
760 :
デフォルトの名無しさん :2006/01/21(土) 00:41:27
>>756 めちゃくちゃ安いな。
赤字でてるだろ向こうは。
>>756 地域によっても違うが、かなり安い。(正直、自分だったらこんな仕事受けない)
ただ、こんなところで聞いても何の役にも立たない。
心配なら他の業者に合見積もりをとること。
みんな優しいな。
そんなので金とれるんだ・・・おれでもできるな・・・ 学生だけど小使稼ぎと勉強がてらにコーディング出来るバイト探そうかな
>756 >763 みたいな素人が作るとしたらもっと安くできる。ただし出来は......
動きゃいいんだ・・・ちくしょう・・・
>>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;
CGIなんだから入力用のページや結果出力用のページも作らないと。 1ページ辺りの相場は10000〜30000円程度、 CGIスクリプトはフルスクラッチで50000円くらい?
>>766 せんせえ、それCGIになってねえっす。
あ、ちゃくっとuse CGIで技術サイトにあるようなForm部品むき出しのようなの
取って付けても駄目っす。
みっともなくない程度に最低限のデザインもしなきゃクライアントに怒られるっす。
それに加えて、概要設計書、詳細設計書、仕様書、テスト設計書とテスト結果、
それにまつわる数回の打ち合わせ、瑕疵対応まで入れて半人日17,000円で
じゃキツいっす。(この規模だから概要設計書と詳細設計書は仕様書で代用
させてもらうとしても・・・)
どんな小さな、たとえ3行スクリプト作成10秒でもCGI一本\17,000は安いっすよー
俺SOHOで今仕事に困ってますけど、その値段ではCGI作成は受けられないですぅ。
>>766 そりゃ、こういう仕事やったことないなら、ボッタクリと思うかもしれんけどね。
CGIなんだから、それだけじゃ動かないだろ? フォームのHTMLの方も必要だし。
しかも
>>756 はどう見ても超ド級初心者なんだから、納品後に質問が来ることも
考えないといけない。「どうやって設置するの?」「FTPって何?」とか。
設置したサーバがメンテナンスに入っただけなのに、「動かない」と言ってくる
ことも考えられる。
(アフターサポート一切無しという契約でも、電話がかかってきて40分ロスするだ
けで、0.1人日くらいは損をする)
さらに納品書・仕様書や、請求書も作らないといけない。
打ち合わせなり納品時なりの交通費も問題だ。
そう考えると、
>>761 と同意見で俺は17000円では引き受けない。ペイしないもん。
フォームHTMLとセットで最低4-5万円はもらわないと。
>>767-769 まあ、実務経験者と趣味でやってる素人の違いということで。
今頃766は顔真っ赤にしてるだろうから、そろそろ勘弁したれw
世間知らずの学生とWeb屋はWebProg板逝け
$txt="abcabc"; print $1 if $t=~/(a.*?$)/; この場合、*? を使用しての最短一致なので abc となると思ったのですが、abcabc となります なぜでしょうか?
そりゃ終端へのマッチを要求してるからね。
ああ違うか。どこから一致させるかとかは門外漢なので他の人に。
>>772 初心者が嵌りがちなとこ。よって、あんたはまっとうな初心者。
今後もまじめにやる気があるなら、推奨書を買いなされ。
777 :
766 :2006/01/21(土) 13:51:45
778 :
デフォルトの名無しさん :2006/01/21(土) 14:23:22
Perlでhtmlファイルを書き出したいんですが、どこか解説サイトないですか? 分かりやすいサンプルでもいいのでお願いします。
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.*?$)/ で欲張りマッチの方に余計なもの奪わせるといいんじゃね?
正規表現なんか使わない方が速そうだけど。
世の中はライブドアでそうぞうしいわけだが、 こうなるとPerlスレとしては小飼さんの様子が 気になるな。
な、なんだってー
ついにperl、情報処理試験のプログラム問題に出るようになりましたね^^ 今パンフレット見てて気づいた。
787 :
デフォルトの名無しさん :2006/01/21(土) 21:36:17
あげ
教育用言語としてPerlを出すのは如何な物かと思うが……
マジか!情報処理受けるからCやらなきゃと思ってた矢先に超ラッキー
でも、perlは高度区分で出題されるみたい
なんと言うか、そういう試験にいくらでも書き方があるPerlを使うのは間違ってる気がする brainfuckとまではいかないが、言語仕様が明確で簡潔な言語を使用するべきだと思う
Schemeだな
>>790 あれ? 高度区分は疑似言語しか出ないんじゃなかったっけ?
プログラミング言語自体が出題されるのは第二種(今の"基本")だけだったような
まぁ、はるか昔のことなのでもう忘れたが
このスレも流行っちゃいそうだな
いい事だ
Perlの「仕様」wwww
試験に申し込むとラクダ本がついてくるならうれしいな。
やべ、ラクダ本一時的に売り切れるかもしれんな 下巻今のうちに買っておこう
あと2,3ヶ月もすると春やねぇ
---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}を意図的に消せば毎回読み直してくれますが他に良いアイディアはありませんでしょうか?
>>801 つdo './abc.pl';
ってかrequireの戻り値はエラーが発生したかどうか調べるためのものだから、
そういう風に使うのは避けたほうがいいかと思うが
doで解決しました。ありがとうございました。 Data::Dumperで出力した値をよくこの手法でデシリアライズしたりしていたのですが requireだとファイルに文法エラーや存在しなかったりするとエラーになるので doの方がいいかもしれませんね。エラー出さない方が良いのかは微妙ですけど。 このような目的では本来はData::Serializerを使うべきなんでしょうけどお手軽なので やめれません-_-;
それは人として正しいです
普通 Storable じゃね?store/retrieve 使えば手軽だし。
>>790 出題「この処理を実現できるモジュールを、CPANからみつけなさい」 とか
何が変わったのかしら わくてか
子飼氏、この間バタバタだからEncoding関係の改善は期待できんか
>>805 時にはファイルを手で弄りたいときもあるのです。
セキュリティ・速度よりも何よりも手軽さを優先したい時はDumperが便利!
後で他のシリアライザに変更するのもそれほど手間じゃないし。
webprog板おもすれー( ^ω^)
>>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/ ってエラーが出ます。
Content-type:text/html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> 1行空ける
>>813 低レベルすぎておもすれー( ^ω^)なのです
( ^ω^)あなたもわたしもVIPPER!(^ω^ )
818 :
デフォルトの名無しさん :2006/01/23(月) 06:53:07
>>815 ありがつございます。
ず〜っとコレで詰まってました。
助かりました。
>>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だとこういう場合どういう風にするもんなんでしょうか?
>>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;
}
もっといい方法あったら教えてください
>>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;
}
>>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
sub hoge { my $val = shift; my $n = 2**32; map { $n/=2; $_ ? $n : (); } split(//,unpack("B32",pack("N",$val))); }
どうもこうも無いよ氏ね
入力ストリームの一行読み込み処理で、一行の区切りを \n でなく、 %0A 区切りにして一行ずつ読込みたいのですが、 調べたら「$/」に区切り文字入れろって書いてありました。 ただ、これだと入力ストリーム全部が%0A区切り読み込みになってしまうので困ります。 ストリーム個別に読込区切り文字を指定する方法がないでしょうか? $/='%0A'; #←ストリームを指定したいができない print $_=<DATA>; # aiueo%0D%0Aを出力 __END__ aiueo%0D%0Akakikukeko%0D%0Asasi(ryaku
その個別のストリームとやらを使用する前に$/に毎回入れてやればいいんじゃ
見せてもらおうか、ストリーム前の$/の使い方とやらを!
は?
>>829 必要なところで local を使って代入するか、
IO::Handle->input_record_separator() を使うか。
perldoc perlvar に書いてあるサンプルを読めば、普通は思い付くと思うんだが…。
坊やだからさ
無駄に煽るのもこのスレの特徴、と
お前だけだバーカ
なんかこのスレレベル低下してる気がする 変な奴はwebprog行けよw
さぁ殺伐としたふいんきになって参りました
840 :
デフォルトの名無しさん :2006/01/23(月) 17:22:24
殺伐としたこのスレに珍走団が!! ___ /孕/二 パラリラパラリラ 。 / ̄ − 。 − 。 。 。 − __ o孕o三 @孕@三 o孕孕孕o三 /孕/ 。 − 。 − / ̄ ̄ o孕o三 o孕o三 _/ ̄ ̄\_//=3 ___ 。 − ━┷-○ー○ー┘三 /孕/二 o孕o三 。 − 。 / ̄ − 。 − @u@三 。 − o孕o三 o孕o三 ワーワー @孕@三
いやつまんないから・・・
新宿にPerlだかpearlっていうバーがあったけどオフやるときはここでやろうぜっ! あとプロピアもバーの近くにあるからラリーも呼んで。
843 :
831 :2006/01/23(月) 18:50:18
そろそろWebprog版へ帰ります。探さないで下さい
WebProg931実装キボンヌ
俺様だけ賢いと思い込んでいる厨がいらっしゃるようでつね。
846 :
829 :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;
}
このソース見る限り、ストリームごとに個別に設定は無理そうですね。
ありがとうございます。
847 :
829 :2006/01/24(火) 01:53:11
そしてWebprog版へ帰ります。行ったこと無いけど。
>>842 そんな名前のバーは世界中にありそうな気がする。
そんな名前の楽器会社もありそうな気がする
こんなスレ見てないで仕事しろ
>>850 まさに今仕事中に見ている俺に、そんな注意をするおまいは俺の上司か!?
それとも俺のディスプレイ見つめてる後ろの席の奴か!?こわいわ!
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' : $!";
853 :
852 :2006/01/24(火) 18:13:24
『質問すると自己解決できる』の法則。。。 すみません;;
>>852 法則?
普段からよく調べもせずに質問するからそうなる。
>>853 > 『質問すると自己解決できる』の法則。。。
> すみません;;
質問しようとすると問題点を頭の中で整理するため、
答が見えることがあるわけです。
ほんとこいつらは難癖付けないと気が済まないんだなw 他人事だと思ってもイライラしてくるわw 周りから嫌われてそう
たぶん、先輩とかにやられた過去があるんだよ。多くの人に。 最初はみんな不快だったはずだ。 が、この業界はこんなもの、と慣れてしまった。 そして同じ事を平気でするようになる。
任意の10進数を16 bitの二進数データに変換したい場合について質問させてください。 下のように記述しても、何故か8bit分の文字列しか帰ってきません。 お手数ですが御教授頂けないでしょうか。 $data = 72; $out_data=unpack("B16",pack("C*",$data)); $out_dataに、"0000000001001000"が戻ってくることを 期待しますが、"01001000"が戻ってきます。
>>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 様
御教授ありがとうございます。
重ねて質問をよろしいでしょうか。
教えて頂いた方法で、例えば
"$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"と出力させるには如何したらよろしいでしょうか。
御多忙の折に申し訳ありませんが、御教授頂けましたら幸いです。よろしくお願いいたします。
>>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 ビットであることは保障されていない。
$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から起動される簡単なものでいいんですが・・・
>>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.)
>>867 > Perlで書かれたHTTPDってどこかにありますか?
HTTP::Daemon とか。
> inetdから起動される簡単なものでいいんですが・・・
こっちはしらね。
>>868 あ、本当だ。32ビットは保証されていたのか。
やっぱ互換性を保ちたいということかな。
(そういや昔は Perl バージョンアップしたら
動かなくなるスクリプトあったな…)
>>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/... つか、これならシェルで十分すね・・・
>>871 それ、
"GET /etc/passwd HTTP/1.1"
とか送り付けられたらヤバくね?
>>872 /etc/hosts.allow,/etc/hosts.denyで規制してるし、どうせローカルでしか使わないし。
でもあんまり良くないかな。
>>860 >任意の10進数を16 bitの二進数データに変換したい場合について質問させてください。
sprintfを使え。
つーか、これまでそう言った人がいないのは、どうしたわけだろうか?
>>874 「○進数を×進数に…」の質問は散々既出なので、sprintf の %b を
知ってる間は質問を読みもしない。
876 :
デフォルトの名無しさん :2006/01/25(水) 12:54:56
すみません教えてください setenv CLASSPATH… が羅列されたcshファイルを シェルのsourceのように perlの中から読み込んで、環境変数CLASSPATHに設定すること は出来ますか?
>>876 $ENV{CLASSPATH} = `csh -c 'source $csh_file >/dev/null ; echo -n \$CLASSPATH'`;
出来ました! ありがとう! 先ほどsage忘れました、ごめんなさい
880 :
デフォルトの名無しさん :2006/01/25(水) 20:49:29
Perl初心者です UNIXコマンドでのwc -lのようにファイルの中の行数を 出力するにはPerlでどうすればできますか?
>Perl初心者です あっそ、だから何
>>880 print `wc -l foo.txt`;
人間としての器の差だなw
>>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初心者です」という一言があるからこそ、
ファイルの開き方を軽く説明しているつもりだし。
( ´д)ヒソ(´д`)ヒソ(д` )
もうこのスレwebprogと併合しろよ
5.9.3はいつでるの?
889 :
860 :2006/01/25(水) 23:08:21
865,866,874様 御教授ありがとうございました。 sprintfに "b"があるとは知りませんでした。 866様の例も勉強になりました。 大変ありがとうございました。
>>884 に同意。
何かこのスレ潰そうってかperlを貶めようってかしてる椰子が
1個流れてるな。
891 :
860 :2006/01/25(水) 23:14:07
・・・。 >>」881 氏ねや ゴミはよ!
ぎゃっはっは 初心者を煽るのを含めて楽しもうぜ
VIPでやれ
vip以外でvipでやれっていうの始めてみた
まんこぉー
何なんだこの荒れようは…
WebProgのPerl貶しスレ辺りから変なのが沸いてきたんじゃないかな。 長い間いい感じで進行してたのに残念ですな。
なんでもかんでもWebProg板のせいにする奴が出てきてから荒れてきた
その前に難癖厨が・・
一部残っていた卵がふ化したんだろう
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を使う前提で、なにか解決策などありますでしょうか。 ファイルのデータ構造を変えて普通にファイルとして読み込んでからハッシュに格納するようにすればいいんでしょうが、 こういう使い方ができないのかどうか激しく疑問です。。 以上、ご教授よろしくお願いします。
>>902 our %s=〜 で明示的にグローバルにするか、
ハッシュの中身を返すサブルーチンに替える。
>>902 %mainhash = require ふぁいる;
っていけないのかな?
試してないけど。
>>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 ふぁいる };
}
---------------------
>>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 それは試したんですが、無理でしたです。
すみません、説明不足でした。
>>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 ありがとうございました。
our より、 > hashを書いたファイルを作成して、requireで読み込んでそのまま使おうとしています。 の方がキモいけどなぁ。
Visual Perlってもう手に入らないんですか? インストーラ自体はFTPにあったのですが、インストールしても ライセンスがないというダイアログが出てはじかれてしまうんですよ。 オフィシャルの b) provide unlimited licenses for the current 2003/2002 plug-ins; ってのはKomodoのライセンス持ってる人にだけってことでしょうか?
Perlなんてエディタで書けよ・・・
TMTOWTDI
すいません、質問です。 ある2つの配列のハッシュ(%A, %B)で、各 key に対する値が、A, B ともに あったら、それを A から削除したいのですが、よい方法ありますでしょうか。 今、思いつくのはこんな感じです・・・ foreach $key ( keys %A ) { foreach $i ( 0 .. $#{ $A{$key} } ) { if ($A{$key}[$i] = $B{$key}[$i]) { ここで削除処理 ? } } }
delete $A{$_} for keys %B; とか?
914 :
912 :2006/01/26(木) 21:24:40
>>913 ありがとうございます。
でも、それだと、key ごと消えちゃったりしますよね。
key に対する重複する値だけ消したいっす。
deleteのかわりにundefにしたら?
916 :
913 :2006/01/26(木) 23:36:23
>>914 あ、すまんす。値が配列になってるのね。ちょっとうまい方法が思いつかないなあ。
>>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;
}
>>912 通りすがりの初心者です。間違っていたら指摘よろです。
foreach my $key(keys %B){
$A{$key} = [undef] if($A{$key} != undef);
}
919 :
918 :2006/01/27(金) 01:09:03
連書きすいません。 $A{$key}=[undef] じゃなくて $A{$key}=[] でした。
>>918 仕様が要件を満たしているかどうかは置いておくとして、
$A{$key} != undefの所はdefined $A{$key};と書かないと。
-wやuse warningsを使うと、そういうことを結構教えてくれるから使ってみることをお勧めする。
while (my $key = each(%A)) { if (exists($B{$key}) { delete($A{$key}); } }
>>921 each の途中で、delete ってしていいの?
(・∀・)イイ!!わけない
924 :
912 :2006/01/27(金) 07:09:21
>>912 です。
みなさん、ご助言ありがとうございます。
昼間に試してみて、夜にでも結果報告をします。
感謝感謝です。
>>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
}
今 $ 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! $ のようにする方法をずっと考えているのですが 結局思いつきません。。。 どなたかいい方法をお願いします。
>>926 よく使われる手は -t STDIN で標準入力がttyかどうか調べる、だな。
リダイレクトで明示的にttyを標準入力につないだときに誤判定するが
それはアキラメで。
>926 STDINが、コンソールか、ファイルかなんて、 C言語でも、かなりOSに依存したコード書かないといけないと思うからperlだと難しいんじゃないかな。 一応、seek(STDIN,0,0) してみたら、 コンソールの場合は、0が返ってきて、 ファイルの場合は、1が返ってきたので、 これで判断できると思うけどOSに依存するかもしれん。
929 :
928 :2006/01/27(金) 11:26:16
930 :
928 :2006/01/27(金) 11:34:10
package が存在する(定義されている)か判定する方法がないでしょうか? print "defined PackageName" if defined(PackageName); ↑でできるかなと思ったのですが、 defined("PackageName")としていることが まったく同じような気がするので常に1が返ってきて無駄でした。
>>926 馬鹿だなオマエ。そういう時は「引数に何も付けなかった時は
標準入力から入力する。」という仕様にしてしまえばいいじゃ
ないか。実際その方が便利だぞ。
932 :
926 :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を標準入力につないだとき』
なのですが、というのが分かりません。。。
どういうことでしょうか。。。?
933 :
926 :2006/01/27(金) 11:53:42
>>931 あ、本来の仕様は
perl [-i input_file] [-o out_putfile]
なんでそれは無理です。
質問のために省略しました。
ただ、その方法も確かに簡単でいいですね!
とりあえずここで・・・ (*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");
>>932 $ perl hoge.pl < /dev/tty
>>934 1. ○○がしたい
2. 自分はこうやった
3. 結果は××になってほしいが△△になってしまった
3 が抜けてて返答のしようがない。
ppmでHTML-FormatTextが見つからないのですが、 CPANで拾うとppdが入っていません。かなりググりましたが他に 見つかりませんでした。 自動でインストールできるものはどこで入手できますでしょうか? あと、みなさん普段どこからモジュールを手に入れてますか? オススメのリポジトリとかあれば教えてください。
ppm とか ppd って何? cpan -i HTML::FormatText で普通に入るけど。
Active Perl5.86で既になかった 古い5.81ので拾った記憶が 既に入らなかった。あきらめたけど ppmでオフラインで入らないのは古いから対応してないよ警告なんだと思う。 namazuでもそうだったし 野良で使えるとは思うけど もしかしたらアーカイブ鯖からppmで入れられるのかね? 5.81アーカイブに繋いで入れられるのかな? 不明
940 :
937 :2006/01/27(金) 20:23:47
ありがとうございます。CPANでインストールできました。 こんなのがあったんですね・・・(ppmの立場は!?) いままでppmを使っていたので、モジュールのインストールによく躓いていました。 perlのモジュールって,統一感がある様で結構バラバラな感じですね。 Image::Magickもppmでは入りません。DLLのインストーラでオプション指定 しないといけない現状です。 ウエブにあふれてる解説が古いままなのが、躓く原因だと思います。
お前は何を言っているんだ?(画像ry
>>940 > ppmの立場は!?
ActivePerlで確実に使えるパッケージである。
コンパイル済みなので、コンパイラを持っていないユーザーでも使える。
小飼弾て朝生に出てるんだな。今知ったよ。
な、なんだってー またでんのかよ
さて、情報処理申し込みにオフィシャル行ってくっか
@list=glob("*.c"); $val=$list[$#list] これを一文でやる方法はありますか? あるリストの最後の要素を取得する方法が知りたいです。
サンプルなどで foreach my $key( @list) { print "$key", "\n"; } という書き方がよく行われていますが my $key; foreach $key( @list) { print "$key", "\n"; } とすべきではないのでしょうか?
ヒント: foreach my $key( @list) { print "$key", "\n"; } print "$key", "\n"; my $key; foreach $key( @list) { print "$key", "\n"; } print "$key", "\n";
>>946 $val=[glob("*.c")]->[-1];
とか?
>>946 便乗しての質問なのですが、なぜ
@list=glob("*.c");
$val = pop(@list);
は出来るのに
@list = pop(glob("*.c"));
はType of arg 1 to pop must be array (not null operation) というコンパイル
エラーになってしまうのでしょうか?
>>946 こうじゃね?
$val=(@list = <*.c>)[-1];
もっとも、俺なら後から見てワケワカメになるので、こうするけどな。
my @list = <*.c>;
my $val = $list[-1];
あと、deprecated というわけじゃないようだが、glob() じゃなくて
File::Glob か <> 演算子を使っとけ。
>>950 pop() は引数を与えた場合、与えられた配列を変更するので、変更できない
(lvalue じゃない) サブルーチンの返り値やリテラルを渡すとエラーになる。
[-1]が使えたんですね。アリガトウございます.
unlink (sort glob "*.c")[-1]; ところでこのソートって必要だと思いますか? >as the standard Unix shell /bin/csh would do. /bin/cshはファイル名でソートしてくれる仕様なのかな、どうなんだろ。
unlink +(sort glob "*.c")[-1]; こうだった。
>951 >あと、deprecated というわけじゃないようだが、glob() じゃなくて >File::Glob か <> 演算子を使っとけ。 なんで?
>>956 File::Glob の方が細かく制御できるから…と思ったけど、
:globally なら glob() にも <> にも影響あるんだな。
これはスマンカッタ。
>>953-954 unlink() かよ。
すみません Windowsで言う『切り取り→貼り付け』、UNIXで言う『mvコマンド』みたいな事をしたいんですが モジュールとかありますか?
>>958 モジュールって…
rename() でええがな。
>>958 あえてモジュールを使いたいならFile::Copyにmvがある。rename直でいいと思うが。
ところでこのスレでPerl6の質問ってしてもOK?
まだ質問があるわけじゃないんだけどさ
ポインタって?
>>963 ありがとうございました!
>>962 すみません、どう表現したらいいのかもよくわかってなくてニュアンスで書きました。
>>960 ここいってくらさい。
次世代Webプログラミング言語の大本命Perl6/Parrot [WebProg]
Jcode.pmの [@match = ] $j->m($pattern, $opt); を使って、以下1行のSJIS文 あいうえお/かきくけこ/さしすせそ を/でsplitするにはどうしたらいい?
>>959 >>960 renameは同一ファイルシステム内でしか移動できないので、
ファイルシステムまたぐ可能性があるならFile::Copyのmvを
使うべし
my @list; my $rec = { title => '11', genre => '77', }; push(@list, \$rec); &test(\@list); sub test(\@) { my ($lst) = @_; foreach my $aaa (@$lst) { # ここでデリファレンスする方法をおしえてください。 print $aaa->{title}; } } よろしくお願いします。
print %$aaa->{title};
ハッシュのリファレンスのリファレンスをpushしてしまってるから push(@list,\$rec) を push(@list,$rec) にするとかは?
971 :
960 :2006/01/29(日) 01:36:31
>>965 りょーかいです
>>967 ファイルシステムを超えて移動したことなかったので知らなかったorz
やっぱり一般的な関数もちゃんとドキュメントは読まないと駄目ね・・・
>>968 >>969 書き間違えてますぞい。
print $$aaa->{title};
それだとNot a HASH reference といわれてしまうのですが・・・
973 :
968 :2006/01/29(日) 01:45:57
ありがとうございます。print $$aaa->{title}; で表示できました。 my @list; my $rec = { title => '11', genre => '77', }; push(@list, \$rec); これ「ハッシュのリファレンスのリファレンス」になってしまうのでしょうか?
974 :
968 :2006/01/29(日) 01:51:43
理解できました。ありがとうございました。
975 :
969 :2006/01/29(日) 02:17:19
おいちょっと待て、 print $$aaa->{title}; これだと Not a SCALAR reference になるんだが
976 :
969 :2006/01/29(日) 02:18:31
俺の勘違いだったすまん
リファレンスのリファレンスって何か嬉しいことあるの?
>>967 Winの場合は、rename で内蔵HDDから外付けUSB HDDに移動できたけどな。
え?
>>978 それはファイルシステムとは言わないような気がするんだけど気のせい?
>>981 アホみたいに煽るだけじゃなくて実のあること書いてよw
FATとかNTFSのことじゃないの?
うちでもやってみた。(内蔵IDE HDD→外付けUSB HDDへの rename) Linux Perl の場合:無効なクロスデバイスリンク と出て失敗。 Win98SE(ActivePerl)の場合:正常に移動できた。 デュアルブートのマシンなので、ハードウェアは全く同じ環境。 誰か理由を説明できる人、よろしく。
内部で使ってる関数が違うだけの話じゃないの?
windowsは知らんけど、linuxとかのmvもデバイスをまたぐ時は 内部でcpとrmを実行してなかった?
Linux-2.4,Glibc-2.3.5で試したけど、 mvで違うファイルシステムにファイルを移動しようとしたら、 renameでエラーを検出した後に、read/writeでファイルをコピーしてる。
>>985 その通り。
まず rename を試み、失敗したら自分で移動処理してる。
ActivePerlのrenameは、そういうコードが入ってるってことかな?
rename(2)とMoveFileExの挙動違いじゃないのかな。 Windowsの関数の方が親切だよね。
MoveFileExじゃない、ただのMoveFileか。 MoveFileExならフラグの制御でUNIXと同じ動作にも 出来たんだろうけど、あえてMoveFileを使う辺りが適当というか。 ユーザーにとっては便利だけど。
>>989 Win9xでも動くようにするためじゃない?
>>990 MoveFileExってNT系にしかないのか…
朝っぱらから小飼弾の喋りはつらいですね
誤爆した
もう次スレの時期か…また立ててくる
ふふっ、くすぐったいですか? それは、すみません。 でも、ゆっくり味わいたいと思います (身をよじるはやてに微笑をむけながら) ふふ、可愛らしいですね……、大人になったらするんですから…… はやてちゃんの場合でしたら、したいって相手がいっぱい居ると思いますよ? ですから、あまり恥ずかしがらないでくださいね。 (そう話しかけながら、胸の蕾を指で転がしている) ん、ふ……ちゅ、ぺろぺろ…… (乳房の輪郭を、手で探りながら、胸の蕾を舌先で転がす) ふふ、どうですか……? んちゅ……、ちゅ…… (はやての身体に跨り、首筋に顔を伸ばして唇を這わせる)
んふ………っ (ペニスが下腹部に当たると、身体を浮かして) もう、したいんですか……?ふふ、まだ早いですよ。 (はやてちゃんの胸を揉みながら、微笑む) んふっ……ぺろっ…… (胸から鎖骨へとゆっくり舌を這わせながら、身体を浮かす) それでは、私のを、はやてちゃんの唾液で濡らしていただけますか? (そう言うと、69の体勢になるため、お尻をはやてへ向け 身体をペニスの方へと寝かせていく) ……………… (ペニスを掴んで扱きながら、はやてからの愛撫を待っている)
ひぃぅん……あっ……ん…… (ペニスを扱かれて、腰が動く) シャマル………うち…頑張る…… ちゅ……ん…… (ペニスへの刺激に耐えながら、懸命にシャマルのアソコをチロチロ舐める)
ふふ、腰が動いてますよ、気持ち良いですか…? ぁん……、はい、頑張ってくださいね…… ちゅ……ん…、ちゅっ…… (嬉しそうに腰を振りながら、 ペニスの先端を舌先でくすぐる) ふぁ……ぁ、ん……… (秘部をはやての唾液を、自分の愛液で濡らしながら、腰を揺らす) ちゅ、ぺろ……ふ、ぁ…… (咥内にペニスを含み、ペニス全体に舌を絡め唾液で濡らす) ふふ、これは、どうでしょうか…… (上半身を軽く浮かし、はやてのペニスを豊満な胸で挟む) (そして、挟んだまま胸でペニス扱く)
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。