1 :
デフォルトの名無しさん :
02/11/16 03:08 Perl言語で、(x+1)の2乗やら、(x+y)*(x+2y) などといった 計算を行うにはどうすればよいでしょう? もちろん2乗は「(x+1)**2」なんて事は承知してますが、 このまま計算するとモロにエラーw(当たり前) ちなみに欲しい出力結果として、 前者は「x^2+2x+1」後者は「x^2+3xy+2y^2」。 分かる方お願いしますm(_ _)m
mathematica 買え。 単発質問するな。 終了。
MATLABの方がいい、と思う23の秋。
4 :
デフォルトの名無しさん :02/11/16 03:12
ってか質問自体が(´ー`)ワケワカンネーヨ
5 :
デフォルトの名無しさん :02/11/16 03:12
>>2 .3
やっぱこのプログラム組むのって難しいもんかな??
一度組んでみたいんやけども。
>>5 C++で、ひたすら演算子をオーバーロードして、多項式オブジェクトを
返すようにすれば出来ない事も無いんじゃない?
つーか俺の大学の某研究室で、上のようなことをやりつつ、さらに微分まで
同時に計算する、みたいなパラダイムを研究している教授がいたはずだか。
Splusがいい!
print (x*x)+2*x+1; print "\n"; print (x*x)+2*x*y+2*(y*y)
あぼーん
#!/usr/bin/perl exit 0 unless (@ARGV); $ARGV[0] =~ s/\(//g; $ARGV[0] =~ s/\)//g; $ARGV[0] =~ s/ //g; ($hoge, $hero) = split(/\*/, $ARGV[0]); @hoge = split(/\+/, $hoge); @hero = split(/\+/, $hero); @result = undef; for ($i = 0; $i <= $#hoge; $i ++) { for ($j = 0; $j <= $#hero; $j ++) { $hogen = int($hoge[$i]); $hogen = 1 unless($hogen); $hogec = $hoge[$i]; $hogec =~ s/\d//; $heron = int($hero[$j]); $heron = 1 unless($heron); $heroc = $hero[$j]; $heroc =~ s/\d//; $resultn = $hogen * $heron;
if (($hogec eq "") && ($heroc eq "")) { $resultc = ""; } elsif ($hogec eq $heroc) { $resultc = $hogec . "^2"; } else { if (ord($hogec) < ord($heroc)) { $resultc = $hogec . $heroc; } else { $resultc = $heroc . $hogec; } } $resultc =~ s/ //g; push(@result, $resultn . $resultc); } } for ($i = 0; $i < $#result; $i ++) { for ($j = $i + 1; $j <= $#result; $j ++) { $in = int($result[$i]); $ic = $result[$i]; $ic =~ s/\d//;
$jn = int($result[$j]);
$jc = $result[$j];
$jc =~ s/\d//;
if ($ic eq $jc) {
$result[$i] = sprintf("%d%s", $in + $jn, $ic);
$result[$j] = 0;
}
}
}
# ここで @result をソートする。未完。
$out = undef;
foreach (@result) {
$_ =~ s/\d// if (int($_) == 1);
$out .= sprintf("%s + ", $_) if ($_);
}
$out =~ s/ \+ $//;
print "$out\n";
__END__
>>1 いいヒマつぶしになったよ。
【使い方】 数式を " " でくくってコマンドライン引数としてわたす。 ( ... ) * ( ... ) の形式のみ対応。 括弧内の項はいつくあってもいい。
このスレ乗っ取れそうだな。
しばらく保守しとこう。
お腹空いた。
ねむねむ。 あさあさ。
ミ ミ 〜√グラ(,,゚Д゚) 釣られてみまつた (/(/ ̄U U しかもこの板はくっきがいるのでつね・・・
トリップつけとこ・・・
ギコタンども。 上の方ではトリップだけで割とまじめに振舞ってます。
足跡ペタペタ ってここ何板?
巡礼者さんども。 プログラム板です。 簡単な質問に答えて自己満足に浸ってます(-w-)
こんな底のほうで何やってんだか。
暇してますw
暇してるとこ悪いけど、posって関数知ってる? perl5で入ったのかな。手元にあるラクダ本には出てないんだけど。
test
>>26 遅レスすまそ。仕事で二泊の当直でしたw
----perlmanjより引用----
>pos SCALAR
>対象の変数に対して、前回の m//g が終了した場所のオフ
>セットを返します。 そのオフセットを変えるために、変
>更することができます。
----perlmanjより引用----
つまり $s = "abacadaeaf" について $s =~ m/a/g を行ったとき
"a" は 1byte 目にあるので pos($s) は 1 を返します。
ここで pos($s) ++ として $s =~ m/a/g すると pos($s) は 3 を返します。
サンプルプログラムと実行結果を示します。
$s = "abacadaeaf";
$s =~ m/a/g;
printf("%d\n", pos($s));
pos($s) ++;
$s =~ m/a/g;
printf("%d\n", pos($s));
__END__
1
3
ああ、マジレスしてしまったよ。
>>28 tnx
gを付けなきゃ関係ないわけね。
> ああ、マジレスしてしまったよ。
んじゃまた底のほうでマターリとたゆとうててくだちい。
>gを付けなきゃ関係ないわけね。 g 無しで試したら役に立たなかったよ。 指摘されて気付きました。どもです。
この板は底の方は静かだなあ。
保守っぽい。
暇っぽい。
記念かきこ
おこしやす〜(^^) ム板は底の方は静かでつ。
時々えびえびだんと読みそうになる。
なぜにえびえび?(^^;)
なぜか虫偏と間違えちゃうんだろうな。
おお!蝦って字があったのか!! 海老しか知らなかったよ(^^;;
鯣なんて字は知ってるくせに…。 読めなくてkakasiに聞いちゃったよ。
知りませんでした。 「するめ」と入力してスペースバーを押したら出てきました。 ことえりマンセーvv
風邪ひいてへろへろです。 でも午後から出勤です。 学生のころは無責任に休めてよかったなと。
今、一番底のスレに記念カキコしてきた。 一瞬、上げちゃってこれを底にしようかという誘惑にかられたけど、我慢しますた。
えらいぞ
ほめられちった。 では、崖っ淵ギリギリ進行で。
相変わらず風邪でへろへろです。 昨晩は夜勤だけやって今朝早々に帰ってきました。 底スレにも書き込んできました。 引き続き潜行します。
肴はあぶったイカで(・∀・)イイ!!
お酒はぬるぽの燗が(・∀・)イイ!!
お前と二人酒〜ってほんとに二人切りのような(藁
おはようございますー。 一人でもム板でかまってくれる人がいただけ嬉しいです(藁 ずっと一人上手しなきゃいけないかと思ってました(^-^;
( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >_∧∩
_/し' //. V`Д´)/ ←
>>48 (_フ彡 /
500/500 ヤター(・∀・)底ダー!!
53 :
デフォルトの名無しさん :02/12/26 22:58
馬鹿晒し上げ
ウワー(・∀・)アゲラレター!!
69/501 地道に潜行中。
うーむ、少し目を離してたら上げられてしまった。 冬休みだなぁ。
109/503 また沈みますヨー。
58 :
デフォルトの名無しさん :02/12/28 23:43
冬休み上げ
59 :
デフォルトの名無しさん :02/12/28 23:58
1/503 また沈みますヨー。
藻毎ら、あげるのはスルメじゃなくてタコに汁!
60/503 (´-`) 。oO(最近、浮き沈みが激しいなあ…。)
62 :
デフォルトの名無しさん :02/12/29 17:32
掲示板を自作しはじめた者です。だいたい完成したという状況です。 投稿された本文の中に何らかのURLが入っていた場合、それをリンク表示 させる記述はどうやったらよいのでしょうか。この2chのようにです。 下らない質問ですいませんが、どなたかマジレスして頂ければと思います。 宜しくお願いします。
>>62 $text =~ s/(
http:[\/\w\d\.\?\&@-~=:%]+ )/<a href=\"$1\">$1<\/a>/g;
http から始まる英数字と _ / . ? & @ - ~ = : % の連続を見付けてアンカータグに置換。
他に URL を構成しそうな文字があれば [ ] の中に追加すればいい。
まともな質問で嬉しいので age w
しかもトリップ間違えるし……(鬱
67 :
デフォルトの名無しさん :02/12/29 20:00
>>64 さん、どうもありがとうございまつ。
ちなみに、$1ってのは環境変数なんですかね…?
参考までに、知ってたら教えて下さいまし。
>>67 $1?$9には、正規表現のマッチ結果が自動的に格納される。
こんな板初めてだ・・・
あぼんぬさんこんばんはー。 このスレ底にいたんだけどあげられてしまいました。 またぼちぼち潜行するです(-w-)
81/508 俺も他のスレに顔出さなきゃな。 では潜行ー(-w-)~゜
95/505 大晦日ですヨー。 潜りますヨー。
75 :
あぼんぬNO.53 :02/12/31 14:42
1/505 大晦日ですヨー。 潜りますヨー。
ウワー(・∀・)アゲラレター!! age age ...
77 :
デフォルトの名無しさん :02/12/31 15:40
sub hoge{100000}; if (&hoge){print &hoge}; と $hoge = '100000'; if ($hoge){print $hoge}; って、どっちの方がパフォーマンス良いの?
下
>>77 それぞれ for ($i = 0; $i < 10000000; $i ++) で時間計ってみた。
上:37秒。
下:30秒。
年越しsage!!
新年おめでとーvv
82 :
あぼんぬNO.53 :03/01/01 14:45
ことよろー
>>83 大丈夫、我々團員は常にトリップ着用。
本人と騙りの区別は一目瞭然です。
しかし騙りは騙りとして生暖かく受け入れるのが良いと思います。
ってゆーか糞スレageるなYO!!
>>82 (・∀・)コトヨロー!!
>>84 わかりました、
>>82 さんを生温く受け入れます、どうぞイラッシャイ・・・
>>85 やほー。こんにちはー。
偽あぼんぬさんも入團しないかな?w
87 :
デフォルトの名無しさん :03/01/01 16:14
地下で糞スレを保守しつづける荒らしって何荒らしって言うの??
地下糞スレ保守荒らしかな? てゆうか保守は荒らしなの?
自覚無いみたい・・・
閉鎖的な利用を目的として保守をするなら立派な荒らしだよ。
ヽ( ´ー`)ノ 別にいいんじゃない?
みのがしてくれよー。 ちゃんと Perl の質問には答えてるんだしさー。 てか、気に入らないんなら age なきゃいいじゃん(^^;;
気に入る入らないの問題じゃないけどね。 削除するほどではないけど一応注意ということで。
良スレはageる、糞スレは流れてdat落ちするのが自然なわけで おまえらは板の目的に沿った使い方をしてるんじゃなく ただ糞スレに棲み付いた害虫に過ぎないわけで 立派な荒らしなわけで でかい口きくな、しねよ
叱られちゃった…(´・ω・`)ショボーン
96 :
デフォルトの名無しさん :03/01/01 19:08
あたまもあそこもコッチコチ! Å / \ ヽ(´Д` )ノ ( へ) くω
うっせーしね おまえのかーちゃんでーべーそっ おまえのかーちゃんでーべーそっ おまえのかーちゃんでーべーそっ おまえのかーちゃんでーべーそっ おまえのかーちゃんでーべーそっ
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/ 1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。
27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?
38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27 鋭いです。
73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
100ゲトー!
ひろゆきプロ固定になりたいんすけど 雇ってくれません??
>>310 ぶっちゃけ2chはどれくらいもちますか?
僕のIP返してください
携帯から記念カキコ(>.<)ナノ
漏れ達がひろゆきを愛したように、ひろゆきも漏れ達を愛してほしい!
まぁ、匿名掲示板なんかいくらでもあるから まとめて引越ししたらいいだけなんだけどね
面白い書き込みの割合のうち、法人・会社からの書き込みが そんなに高いだろうか?ちくり板とかを除けばそうでもないと思うが。 でもUNIX板やプログラム板とかは厳しいかなー 有益な回答レスが減ってしまうかも。
======2==C==H======================================================
2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 138720人 発行日:2003/1/9
年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。
そんなわけで、年末に予告したIP記録ですが実験を開始しています。
「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50 ────────────────────────────
>>745 相手がその程度で、わざわざ内容証明や令状とって訴えに来るような粘着君なら、狂犬にでも噛まれたと思って諦めれ。
今まで悪ふざけで出来たものがあったような気がするけど、そういうのが出来なくなるような?
>>196 また明け方に現われる・・・・(´Д⊂)
叱られちゃった…('・ω・`)ショボーン
保険板と違ってジサクジエンできないからコピペしてるのかな。
さて、winnyへいくか...
ネタ系でもエロゲとかのネタはかなりやばいだろうな。 ょぅι゛ょネタとかSSとかね。 PTAが見たらぶち切れだよ(w
2chは全部IP表示すればよい
>>336 インペリアル・パカ
ならお売りいたしましょうか?
今のところ実験ですが うまく動いていますよ これからトラブルは当事者間で解決してもらう方針です。
踏み台にされて書き込まれたらどうなるの? 踏み台にされた奴が訴えられる?
ところで掲示板のS/N比が上がるように、との理由付けが成されているが、 IP記録されると明言されているにも関わらず糞スレは毎日嫌と言うほど立つよね。。
もともと2ちゃんの鯖所在地は、アメリカ国内ですが、何か?
うん、私も暴力にはからきし弱い。ちっぽけなプライドのために痛い思いはしたくない。
======2==C==H======================================================
2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 139038人 発行日:2003/1/10
なにやら、連日メルマガだしてるひろゆきです。
そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。
重くなって落ちたりしてもご愛嬌ってことで。。。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50 ────────────────────────────
ひろよし良くがんばた。
あまり美咲タン情報を真に受けるのはどうかと・・・・・
敢えて2ちゃん(というかチク裏板)の功績を考えてみると、 世の中はドス黒いってことを漠然と印象づけてくれたことぐらいだろうね。 で、そんなことは大人になれば誰でもわかっていくことだろうし。 漠然としたもの以上に、具体的に2ちゃん発で成功した告発なんてあったっけ?
OSレベルで相手からIPデータ取得の要求があった時にそれに応じるか拒否するか選択できるようにすべきだな
2ちゃんねるができる前はさぞ平和だったんだろうなぁ… 嗚呼、哀しい。
リモホって何? リモートホストって、用語辞典に載ってないよ 誰かおせーて
2ちゃんねる知らない人4%と言う事は、 96%の人が、2ちゃんねるの存在を知っていると言う事?
お と な で す ね (プ
イパーイ釣れてヨカタね。
どこに報告したの? 批判要望?
( ´,_ゝ`)プッ
遊ぶネタが無くなったら訴えると思う。 絶対勝てるし。
アフォか! 2ch に入り浸っているから見えないんだろうな。。 閲覧してなくとも 2ch で書かれていることで名誉毀損を受けているという事実があれば 実際に閲覧していなくとも削除要求は有効だ。 そして、2ch は既に名誉毀損の要件となり得る公共のメディアとして認知度がある、 と裁判所が判断した。わかる?
3.今日は2ちゃんを忘れてゲーセン逝って、喪前の腕を磨いて来る
(^^)
2ちゃんねるに近いあるインターネット関連会社の社長は、 2ちゃんねるの幹部から得た話として証言する。 「2ちゃんねるは、運営者や幹部などが それぞれ別々に会社を作りカネの流れを見え難くしているが、 実際の資金源は複数の大手通信会社系からの調査費名目のカネ。 月額で計約700万円と言い、年間にすれば1億円近く。 額はともあれ、これは通信会社系的には、 ぼう大なトラフィックを調査すると言う表向きの理由が一応は立つ。 自社系に都合の悪い書き込みがされた時に優先的に削除してもらうことも期待している」と前置きし 「通信会社系の削除の期待も含めて、2ちゃんねるは総会屋と同じになっている」と言うのだ。
(^^)
Perl 以外は糞!
146 :
デフォルトの名無しさん :03/01/25 19:40
Perlはカス!
147 :
デフォルトの名無しさん :03/02/11 15:57
そろそろ、Ruby にいってもいいんじゃない?
Perl を勉強するための必携の本は何?
お酒はぬるぽの燗が(・∀・)イイ!!
アサカラノンデンジャナイ
( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/
(_フ彡 / ←
>>149
(^^)
∧_∧ ( ^^ )< ぬるぽ(^^)
154 :
デフォルトの名無しさん :03/05/10 16:06
ActivePerlでテンキーの「-」「+」はどのようにしたら送れますか?
∧_∧ ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。 =〔~∪ ̄ ̄〕 = ◎――◎ 山崎渉
ジオシティーズってCGIできないの?
鼬害
( ',_ゝ`)プッ
なぜにえびえび?(^^;)
__∧_∧_ |( ^^ )| <寝るぽ(^^) |\⌒⌒⌒\ \ |⌒⌒⌒~| 山崎渉 ~ ̄ ̄ ̄ ̄
(^^)
(⌒V⌒) │ ^ ^ │<これからも僕を応援して下さいね(^^)。 ⊂| |つ (_)(_) 山崎パン
163 :
デフォルトの名無しさん :03/09/18 11:42
下がりすぎなので浮上&質問 Date: Thu, 18 Sep 2003 02:34:15 GMT これを +9時間するために1900年からの秒数へ変換する必要がある 1900年からの秒数にするにはどうすればいい?
まるちしてやる(付けたししてるけどな) <img src="hoge">hogehoge<br><a href="hoge/">hogehoge</a><br> となってるやつから"<"と">"でくくられた所だけを取り出したい どうすればいい? ・"<"と">"の間に改行コードがある場合もある ・"<"と">"でくくられたやつの数は固定ではない
自分で数えろよ それぐらい誰だってできる
>>166 エディタでファイルを開く。
<を と置換。
>を と置換。
以上。
169 :
デフォルトの名無しさん :03/10/13 17:24
#(x+1)の2乗 x = 123; #例えば A = x+1; print A**2,"\n"; #(x+y)*(x+2y) x = 1;y=2;#例えば A = x+y; B = x+2*y; print A*B,"\n"; これでいいのだろうか。
170 :
デフォルトの名無しさん :03/10/13 17:27
↑やべ。$つけんの忘れた!
172 :
デフォルトの名無しさん :03/10/14 12:50
偶数と奇数を見分けるプログラムってどうやればできるんでしょうか?
if ($var % 2) { 1,3,5,7,9 }else{ 2,4,6,8,10 }
白痴天才が集うスレはここですか
175 :
デフォルトの名無しさん :03/10/15 00:15
>173 そういう手もあったか。
>>172 use Jcode;
my $odd = "\xb4\xf1\xbf\xf4";
my $even = "\xb6\xf6\xbf\xf4";
my $str = "偶数";
my $euc_str = Jcode->new($str)->euc;
if ($euc_str eq $odd){
print "Odd.\n";
} elsif ($euc_str eq $even){
print "Even.\n";
} else {
print "Invalid.\n";
}
2で割ると馬鹿にされるよ
if ($var & 0xFFFFFFFE) { }else{ } なにか間違ってるかも知れん
頑なに定石を外すスレはここですか?
activeperlでタイムアウト処理出来ないですかね?
$var & 1 で 0 か 1 の解が得られるかと思う。
$var%2 ? print "奇数\n" : print "偶数\n" ;
183 :
デフォルトの名無しさん :03/11/18 01:58
シリアルポートを下記でオープンして open(COM1, "+>COM1") or die "Can't open COM1: $!"; read($Port,$response,1); ってやると永久に待っているのですが、10secで タイムアウトなんて出来ないんですか?
184 :
デフォルトの名無しさん :03/11/18 02:43
185 :
デフォルトの名無しさん :03/11/18 22:56
ここ1週間くらい、あちこちのスレで煽り逃げしてる暇人がいるね。 2ch に来たばかりの中学生なんだろか。
187 :
デフォルトの名無しさん :03/11/18 23:07
>>186 2chに居座って引篭もってるお前より、マシ
ママン、馬鹿がいじめるよー
>>189 だから何?
他人の知らない事、知ってるからって偉そうにしないでよ。
192 :
デフォルトの名無しさん :03/11/19 10:17
組み込み関数のマニュアルに目を通さず質問だけで解決しようとするのは甘えた白痴
193 :
デフォルトの名無しさん :03/11/21 17:11
while (1) { if (!($input_socket && $input_socket->connected())) { $input_socket = $server_socket->accept(); } else { クライアントが接続したときの処理 } 別の処理 } とやると TCP 127.0.0.1:6900 127.0.0.1:1030 TCP 127.0.0.1:1030 127.0.0.1:6900 こんな感じに二重接続してるんだがどうにかならんか? TCP 127.0.0.1:6900 127.0.0.1:1030 こうしたい
195 :
デフォルトの名無しさん :03/12/16 12:52
大変申し訳ないです。素人なんですがPerlからC言語へ変換できるソフトって 存在するんでしょうか?教えてください。よろしくおねがいします。
>>196 ありがとうございました。へぼいSOHOなんで困ってました。
198 :
デフォルトの名無しさん :03/12/16 15:37
すまんっ、聞く所無いんで質問させてくれ。 最近始めたばっかりで、漏れ厨房なんだが、理科の元素記号覚えるテストがでた! だからお遊び用で作ってみたんだが・・・というか作りかけ・・・ #!/usr/local/bin/perl print "Content-type: text/html\n\n"; #↓作りかけだから #require 'cgi-lib.pl'; #&ReadParse( *form ); $mode = int rand(2); $rand = int rand(5); @atom = ("H","O","Cl","C","N"); @molecular =("水素","酸素","塩素","炭素","窒素");
199 :
デフォルトの名無しさん :03/12/16 15:37
if ($mode){ foreach (@no0){ if ($_ eq "$rand"){ $rand = int rand(5); } else{ $key = "$atom[$rand]"; $mode = "物質"; unshift(@no0,"$rand"); last; } } } else{ foreach (@no1){ if ($_ eq "$rand"){ $rand = int rand(5); } else{ $key = "$molecular[$rand]"; $mode = "元素記号"; unshift(@no1,"$rand"); last; } }
200 :
デフォルトの名無しさん :03/12/16 15:38
print <<"EOM"; $answer<BR> $ask<BR> <BR> 「$key」の$modeは何でしょう?<BR> <FORM METHOD="POST" ACTION="script.cgi"> <INPUT type="hidden" name="no0" value="@no0"> <INPUT type="hidden" name="no1" value="@no1"> <INPUT TYPE="text" NAME="name"> </FORM> EOM __END__ #↑このENDがおかしいって言ってくるんだ・・・ じゃっ 最後のENDがおかしいって出るんだが・・・ もう一度言っておくが、お遊び用で、作りかけだからな。 サブルーチン使った方がいいところあるけど、修正めんどくさい・・・・ たのむっ、ドコがおかしいのか教えてくれ。(俺の頭はおかしくないからな。) マジでタスケテッ!
ROのBANされないBOTをperlで作ってください^^
初心者ですが質問させてください キーワード検索作っているのですが検索単語が空白だと 全件表示されてしまいます。 どのように作ったらそれを回避できるのでしょうか よろしくおねがいします。
>>204 検索語がブランクなら
エラーメッセージを出して
検索しなければよい。
if ($ENV{'HTTP_COOKIE'}) { *data = GetCookie($ENV{'HTTP_COOKIE'}); @w = split(/\,/, $data{cookie_mkdia}); $cdata1 = @w[0]; $cdata2 = @w[1]; $cdata3 = @w[2]; } else { $cdata1 = '$name'; $cdata2 = '$mail'; $cdata3 = '$address'; } print "Set-Cookie: cookie_mkdia=$cdata1\,$cdata2\,$cdata3\,; expires=$time_up\n"; sub GetCookie { local($cookie) = $ENV{'HTTP_COOKIE'}; local(*data, @cookie, $key, $val); @cookie = split(/ /, $cookie); foreach (@cookie) { ($key, $val) = split(/=/); $data{$key} = $val; } return *data; } と書いてみたのですが・・、動きません。何故ですか? Cookieムズカシイです・・・。
Perlの基本分かってない。 誤 正 *data %data @w[0] $w[0] @w[1] $w[1] @w[2] $w[2] これでやるよろし。
if ($ENV{'HTTP_COOKIE'}) { %data = GetCookie($ENV{'HTTP_COOKIE'}); @w = split(/\,/, $data{cookie_mkdia}); $cdata1 = $w[0]; $cdata2 = $w[1]; $cdata3 = $w[2]; } else { $cdata1 = '$name'; $cdata2 = '$mail'; $cdata3 = '$address'; } $cooky = "name=$cdata1\,mail=$cdata2\,address=$cdata3\,"; print "Set-Cookie: cookie_mkdia=$cooky; expires=$time_up\n"; sub GetCookie { local($cookie) = $ENV{'HTTP_COOKIE'}; local(%data, @cookie, $key, $val); @cookie = split(/ /, $cookie); foreach (@cookie) { ($key, $val) = split(/=/); $data{$key} = $val; } return %data; } としたのですが・・・。やはりダメでした・・・。何故でしょう??
基本がなってない サブルーティンが後ろにあるやから &GetCookieやろ!(&は小文字や)
それ以前の問題のような気がするんだけど、、、
>>209 有難うございます・・・。
でも、やはりダメでした・・・。
因みに、入力フォームは、
<input type="text" name="name" value="$name" />です。
若しかして、、、$nameに$cdata1が代入されてないのですか??
>>210 すいません・・・。
如何すればよいのか・・、具体的に教えて戴けると有難いのですが。
213 :
デフォルトの名無しさん :04/01/18 19:00
掲示板スクリプトでIPがENV{REMOTE ADDR}に入っている場合IPを見られるようにするには if ($host = $ENV{'REMOTE_HOST'} eq '') { $host = $ENV{'REMOTE_ADDR'}; } else { $host = $ENV{'REMOTE_HOST'}; } if ($host=~/^(\d+)\.(\d+)\.(\d+)\.(\d+)/) { $host = &nslook($host); } #-------------------------------------------------------------------------# # ■ IPを変換 [ nslook ] ■ # #-------------------------------------------------------------------------# sub nslook { my ($x) = @_; my ($ip,$addr); if ($x =~ /([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/) { $ip = "$1.$2.$3.$4"; $addr = (gethostbyaddr(pack('C4',$1,$2,$3,$4),2))[0]; if ($addr ne "") { return $addr; } else { return $ip; } } return "$x"; } print OUT "$date<>$name<>$sub<>$com<>1<>$email<><>$FORM{mode3}<>$host<>\n"; print OUT "$date<>$name<>$com<>$resno<>$email<><>$shouryaku<>$host<>\n"; でいいはずですよね?表示されないのですがどこに問題があるのでしょう・・・
{ my @data = ($ENV{ HTTP_COOKIE } =~ m/cookie_mkdia=([^ ]+)/)? split /,/, $1: ($name, $mail, $adress ); print "Set-Cookie: cookie_mkdia=$data[0],$data[1],$data[2],; expires=$time_up\n"; }
>>213 あなたの質問はWebProg板ですべきだな。
ま、一応答えておく。
そのスクリプトは、ホスト名が空なら、IPからホスト名を引き出してログに記録している部分。
gethostbyaddrでホスト名が返ってこない場合、IPをログに記録している。
「IPを見られるようにするには」という質問なら、こんなマンドクセー事せずに、
print OUT "$date<>$name<>$sub<>$com<>1<>$email<><>$FORM{mode3}<>$ENV{'REMOTE_ADDR'}<>\n";
とかでIPをログに記録すればいいじゃん。
それを見えるところに表示したいというなら、WebProg板逝け!
>>216 すまん。206のコードを書きなおしただけのコード
実際のところ、仕様ようわからんから、あってるかどうかもわからん。
>>217 有難うございました・・。動きませんでしたが・・。
{ my @data = ($ENV{ HTTP_COOKIE } =~ m/cookie_mkdia=([^ ]+)/)? split /,/, $1: ($name, $mail, $adress ); $cooky = "name=$data[0],mail=$data[1],address=$data[2],"; } print "Content-type: text/html\n"; print "Set-Cookie: cookie_mkdia=$cooky; expires=$time_up\n"; #html部分出力 これで、動かんかったら俺にはわからね。
上のコード下2行これに変えてみて print "Set-Cookie: cookie_mkdia=$cooky; expires=$time_up\n"; print "\n"; #html部分出力
>>219 &&
>>220 さん有難うございます。。
未だ、、ダメみたいです。。若しかして$time_upに問題ありですか??
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = gmtime(time + 60*60*24*30);
@day = ("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");
@month = ("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
$time_up = sprintf("%s\, %02d\-%s\-%04d %02d:%02d:%02d GMT", $day[$wday], $mday, $month[$mon], $year+1900, $hour, $min, $sec);
です。
224 :
デフォルトの名無しさん :04/02/02 02:54
すみません。 use XXX; とした場合、XXXの絶対アドレスを指定する方法を教えて下さい。 特定のディレクトリにあるモジュールを使いたいのですが、カレント ディレクトリでは無いため、読み込みが出来ない模様です。 おながいしまつ。
use lib
>>224 #!usr/local/bin/perl -IC:/Document(ry/N224
use XXX;
C:/Document(ry/N224/XXX.pmを読める
227 :
デフォルトの名無しさん :04/02/03 05:39
228 :
デフォルトの名無しさん :04/02/04 02:24
>>227 225が書いたようにlibモジュールを使うのが王道
use lib 'C:/Document(ry/N224';
use XXX;
で226と同じことができる
もしくは@INCに直で書き込み
BEGIN { push(@INC, 'C:/Document(ry/N224') }
とか
226のはかなりの裏技
もう伊藤家並ですよ
229 :
デフォルトの名無しさん :04/02/04 03:10
>>228 >226のはかなりの裏技
ケッ、perl -helpで出てくるもんが何で裏技なんだよ。
嘘ぶっこいてんじゃぁねぇよ。
230 :
デフォルトの名無しさん :04/02/04 10:07
裏技ではない、まっとうな解決策であることは認めるが、 一行目の魔法のコメントに長さの限界があるOS(UNIX系)や、 最初から魔法のコメントを無視する腐ったOS(Windows)が蔓延している現状を考慮すると use lib 以外の選択肢は無いのではないだろうか。
そのために#!行のオプションを自前で解析してるわけだが。 $ cat x.pl #!perl -I/tmp/hoge print $INC[-1],"\n" $ perl x.pl /tmp/hoge
>>230 何ウダウダ言い訳してんだよ、糞して寝ちまいな
-I だと push で use lib だと unshift だけどね。
234 :
デフォルトの名無しさん :04/02/04 19:10
>>233 また嘘つきが。呆れ返っちゃうね。
座りションベンしてそのまま寝ちまいな。
# これは unshift perl -I/foo/bar -e "print join qq/\n/, @INC;" # これは push #!/usr/local/bin/perl -I/foo/bar print join "\n", @INC; __END__ # これは unshift #!/usr/local/bin/perl use lib '/foo/bar'; print join "\n", @INC; __END__
236 :
デフォルトの名無しさん :04/02/06 13:51
>>235 大嘘つきだな(w
少なくとも、perlをソースからコンパイルした事ないな(藁
w)なのか藁なのかどっちかにしてほしい
大学の情報の授業の追試なんですが perlのプログラムでproc loge(x) { eps = 1e-30 k = 1 dd = -x z = x s = 0 while ( z^2 > eps ) { s = s + z/k z = z * dd k = k + 1 } return s } ---------------------------------------------- このプログラムを用いて(Perlでコーディングして) log(2) = 0.693147180559... となることを確かめよ。 プログラムを示すこと。 とありますが 意味が分かりません 一年生のわたしのクラスだれもわかる人 いないんです。 おしえてください(>ー<)
w)(w
>>238 テーラー展開習ってないのか?
まあ、分かんなきゃ留年して勉強し直せ、お前の為だ。
正直 while ( z^2 > eps ) { の式の意味が分からん。∞ループになるような
242 :
デフォルトの名無しさん :04/02/10 00:16
UNIX の tail -f を実現するようなものを作成しようと思っています。 以下のコードでは、select でブロックせずにぶんぶん回ってしまいます。 何故でしょうか? ちなみに fileno(STDIN) にした場合にはちゃんと ブロックしてくれます。教えてください。 use strict; my ($a, $b); open(LOG, "/path/to/file"); seek(LOG, 0, 2); vec($a, fileno(LOG), 1) = 1; while(1) { $b = $a; select($b, undef, undef, undef); } close(LOG);
>>241 while ( z^2 > eps ) {は間違っている。
収束判定の式はそれじゃない。
>>242 selectがブロックするんじゃない。どのデバイスファイルが入出力可能か調べるだけ。
ブロック云々はデバイス自体の状態。STDINはリターンキーが押されるまでブロックする。
>>242 select(2)は、通常ファイルに対しては常に入出力可能を返す。
>>244 >>245 なるほど、ありがとうございます。では tail -f 相当のものを
実現するにはどうしたら良いでしょうか? FreeBSD のtail(1)
では kqueue(2) が使われているので移植性が低そうです。
EOFになったら適当にsleep()、fseek(f, 0L, SEEK_CUR)でEOFをクリア のループ。
こんな感じでできました。sleep の代わりに select を使っています。 use strict; open(LOG, "</path/to/file"); seek(LOG, 0, 2); while(1) { my $buf; if( eof(LOG) ) { seek(LOG, 0, 1); select(undef, undef, undef, 0.5); } else { $buf = <LOG>; } } close(LOG);
perlmagick を使って、ポップ体の文字を画像に埋め込みたいのですが、 指定すべきフォントが分かりません。 環境は OS : debian woody perl : 5.6.1-8.7 perlmagick : 5.4.4.5-1woody です。 ご存知の方、よろしくお願いいたします。
getのところで処理が止まってctrl Cで中断するしかなくなることが
たまにあるんですが、うまい回避方法はないでしょうか?
use LWP::Simple;
for ($code = 1000; $code <= 9999; $code++) {
$doc = get "
http://www.abc/t?$code ";
}
>>251 LWP::UserAgent timeout
254 :
デフォルトの名無しさん :04/07/29 16:45
質問です。 Makefileに$(pixmapdir)という字句があり、これを%buildroot/usr/share/pixmapsに替 えたいのですが、 perl -pi -e "s|\$\(pixmapdir\)|%buildroot/usr/share/pixmaps|" Makefile とすると Unmatched ( in regex; marked by <-- HERE in m/( <-- HERE pixmapdir\)/ at -e line 1, <> line 1. といわれて置換できません。試しに、\$\(pixmapdir\)|を\$\(pixmapdir\)|に替える とエラーはでませんが()がおそらくパターングループと認識されて何も置換されません。 どうすれば()を含むパターンの置換ができるでしょうか。
>>254 シェルで \ が処理されてたりしませんか?
とりあえず perl -pi -e "..." を perl -pi -e '...' に変更するか
\ を \\ に変更してみてはどうでしょう。
>>255 とても親切な方。ありがとうございました。シングルクオートでうまくいきました。
感謝申し上げます。
セレブって頭悪いよね
ゴメン、実況しながら過去スレ読んで誤爆しちゃった(´・ω・`)
259 :
科学 ◆3Zqk5DmAz2 :04/08/22 11:24
260 :
デフォルトの名無しさん :04/08/27 20:58
perl初心者です。 >dnaK atgacgtgggttacgaccccatttagtagtcaaccgcagtga atgaaattgggcagttga >dnaJ >gef atgaagagataa atgcgaggcgtcttccggattagaatcgataaaacagaatgggttaaagagagcgatataatagcggcgggtgcttga atgggttaa >nhaA atgattatcagggcttag atggcgcaaattcttctatag atgattcgtgcggggtaa >nhaR というような出力結果から、 >dnaK 2 >dnaJ 0 >gef 3 >nhaA 3 >nhaR 0 という結果( つまり、「>名前」に対応させた、塩基配列の行の数)を出力し たいのですが、プログラムがわかりません。どなたか教えてくださるかたがい らっしゃるとうれいしです。よろしくお願いします。
261 :
デフォルトの名無しさん :04/08/27 21:00
260の続きです。 >dnaK 2 >dnaJ 0 >gef 3 >nhaA 3 >nhaR 0 という結果( つまり、「>名前」に対応させた、塩基配列の行の数)を出力し たいのですが、プログラムがわかりません。どなたか教えてくださるかたがい らっしゃるとうれいしです。よろしくお願いします。
>>260 マルチになってますがどうなさいますか?
質問です。 perlの処理で、”Enterキーを押す”っていう操作は perlでは、どう記述するのでしょうか? ご存知の方是非教えて頂きたいのですが?
>>263 マルチになってますがどうなさいますか?
265 :
デフォルトの名無しさん :04/09/09 21:48
別のスレでも書いたのですが 課題が出たのですが分からないので教えてください この間に、英文テキストファイル(単語数100語程度)を用意し、 これを処理するプログラムをつくります。 プログラムは、 (1)テキストファイルを単語ごとに区切る (2)単語をソートして並べ替える (3)ファイルに保存する という流れで作ってください ↑という問題です 初心者にも分かりやすくお願いします
課題を人にやらせて、それが自分のためになるとでもいうのか? そうなら喜んで回答するが、少なくとも漏れはそうは思わない。
>266 最初の「この間に」ってのは何だ?
すいません、初心者なんですが教えてください。 登録や削除のできるCGIを作っています。 一つのフォームから、いくつかのsubmitを使って、それぞれ処理を変えたいのですが、 どのようにすればよいでしょうか? なんとなく、nameを使ったり、受ける側でif文を書けばいいのかな?という感じなのですが、 どうやって、if文でsubmitのnameを受けたり、分岐したりすれば良いのか分からない状態 です。 どうぞ、よろしくお願いします。
>>270 さん
ありがとうございます、行って来ます!
273 :
デフォルトの名無しさん :04/11/03 02:21:29
perlで[1]を[2]のようにデータを整える作業をしたいと考えています。 「全角同士で挟まれたスペースの削除(例)中 央→中央」と「全角数字と並んでいるところに,(カンマ)を挿入する(例) 篠崎11→篠崎,11」の2点の作業をしたいです。 何方か、アドバイスを下さいお願いします。 [1] 中 央1丁目591 281 310 218 2丁目602 315 287 227 2丁目522 256 266 179 大字南篠崎1130 559 571 352 本 町831 396 435 301 花 崎1丁目1459 749 710 604 [2] 中央1丁目,591,281,310,218,2丁目,602,315,287,227 2丁目,522,256,266,179,大字南篠崎,1130,559,571,352 本町,831,396,435,301,花崎1丁目,1459,749,710,
274 :
初心者 :04/11/03 04:27:31
273です。 レスPerlについての質問箱にて解決しました。 礼儀を知らなくてすいませんでした。
275 :
デフォルトの名無しさん :04/11/03 12:17:28
>>274 解決して、ヨカーです。
あなたも詳しくなって、困った人を助けて下さい。
もみage!
276 :
デフォルトの名無しさん :04/11/17 17:58:04
すみません。 入力内容をカンマ区切りでcsvデータとして吐き出すコードを作成中なのですが、 入力内容のテキストエリアなどで改行を入れられてしまうと、csvが想定どおりに いきません。 そこで、ファイルに書込む前に改行コードをすべて強制的に削除してしまいたいのですが、 どのようにしたらいいか教えてください。 よろしくお願いいたします。
278 :
デフォルトの名無しさん :04/11/17 22:31:16
trを使う方が速いよ。 tr/\x0D\x0A//d;
s/[\r\n]+//g; と tr/\x0D\x0A//d; は等価じゃないよ
281 :
デフォルトの名無しさん :04/11/18 12:43:35
>>280 むむ?\r\n と\x0D\x0Aとどっちにしたら良いのでしょうか?
ちなみに、これでmacからの入力でも対応できますでしょうか?
(改行コードが違うんですよね、確か。)
>>280 dosの場合は、単独のLFを残すってこと?
そのココロは?漏れ、アホなので教えてちょ。
284 :
デフォルトの名無しさん :04/11/19 00:48:42
>>283 何をどうしたら単独のLFが残ると思うの?
>>284 s/[\r\n]+//g; は、
unix CR or LF
dos CR or CR,LF
mac LF or CR
の「1ヶ以上の繰り返しを削除」を繰り返す。で、ここまでオケー?
んで、dos上でCRが前にないLFが残るのかと。
ちがうの?つか、[\r\n]ってCR,LFのCRだけ先に消したりせんの?
もしかして慣用句?もったいつけんと教えれ。
>>285 > の「1ヶ以上の繰り返しを削除」を繰り返す。で、ここまでオケー?
だからCRLFはまとめて消えるわけだが。
えっと、[\r\n]がCRにマッチしたらそのあとLFにはマッチしないと思ってるのかな?
$a = "223620679";
$a =~ s/[23]+//g;
とか試してみたら?
>>286 これに近いと思ったんだが?
$_ = "\f\f\r\f\r\r\r\f";
s/(\f|\f\r)+//g;
for( split('',$_) ){
print ord$_, "\n";
}
訊くが、
macでは、\nと\fがCRで、\rはLFなんだが、それはご存じか?
macPerlだと[\r\n]じゃ、[LF CR]となり、dosの改行(CR,LF)消せないし。
[\r\f]+か、\n+だけならまだしも[\r\n]+ってのは、何故?
そして、なぜtrじゃイカンのか?
もしかして、\n eq \f(x0a) と思ってないか?
[\n\r] と\nを先に持ってくるならともかく、 \nがCR,LFだった場合、先にCRを喰っちゃうのでLFは残る。 以下、二点をご存じないと判断した。 ・ tr/\x0D\x0A//d; が s/[\r\f]+//g; と等価かつ高速であること ・ メタ文字 \n,\r,\f が、環境によって異なる文字になること
>>286 $a = "22360679";
だと思う
[\n\r] の中の順番は(-を使うときを除いて)関係ないだろ
っていうか、仮に>279がマカーだとしても自分で検証できないのか?
マジわからん。 仮に\nがCR,LFだった場合 s/[\n]//g; で 単独のCRもLFも消えるのか? なら、勉強になったよ。 でもな、だったら[\r\f]としないのはなぜ?なぜ¥nを使う? dosでは [\x0D\x0D\x0A] となって、なんだか余分じゃないか? で、そもそもの発端だが「 tr/\x0D\x0A//d; と等価でない」とは?
295 :
デフォルトの名無しさん :04/11/19 23:59:52
> 仮に\nがCR,LFだった場合 s/[\n]//g; で 単独のCRもLFも消えるのか? それはない。なんでそんな仮定が出てくるんだ?
>>294 276の質問に対し、
277 名前:デフォルトの名無しさん メェル:sage 投稿日:04/11/17 19:54:04
>>276 s/[\r\n]+//g;
ここから、はじまった話。
\fではなく\nを使っていることに疑問を持ち、個人的見解を述べたら
叩かれ気味になってる。
藻前らハッキリ汁。 \nがCR,LFだった場合限定でいい。
s/[\r\n]//;と等価なのは、s/[\r\r\f]//;なのか、s/\r|\r\f//;なのか。
あ〜、それから、コッチの質問を無視したあげく 「なんでそんな…疑問型で終わる」は、もうナシな。 目の前にいたら殴ってますよ。 それとも、釣りなのか…orz
> s/[\r\n]//;と等価なのは、s/[\r\r\f]//;なのか、s/\r|\r\f//;なのか。 s/\r|\n//; ところで「macでは、\nと\fがCR」となっているMac OS のバージョンとMacPerlのバージョンを教えてもらえますか?
>>296 > 仮に\nがCR,LFだった場合
\nがCRになったりCRLFになったりするのは出力した時だけ。
279に贈る言葉 「プログラムは個人的見解通りに実行されるのではなく、書かれた通りに実行される」
>>301 277です。277以降静観してましたが、とりあえずその他発言とは
別人だと表明しておきます。
>>279 の言ってるようなことは意識したことがなく、
\r=0x0d、\n=0x0aだと思ってました。
実際のところ、自らは未検証の内容なので、
確認が取れたら書き込もうと思ってたんだけど、
>>301 で勝手に同一人物とか書かれたもので出てきました。
あと、+はなくてもよかったかな
s/[\r\n]//g;
本当〜〜に、ごめんなさい m(_ _)m 不快な思いを皆様にさせてしまい、猛省しております。 漏れが超バカな勘違いしていました。・・・(;´Д`)ウウッ… ¥fをLFだと思ってました。しかも、ずぅぅっとorz 今日、会社に行って、旧mac,win98,で for( "\n","\r","\f"){ printf "\\x%02X\n",ord; } を実行して、はじめて知りました。情けない、恥ずかしい。 trと等価でない理由は、式全体が返す置換数が異なるって ことで、勝手に納得しました。 撤退して、勉強し直します。 お騒がせして、申し訳ありませんでした。
おめでとう♥
今日はどのスレでも「おめでとう」ばかりだな
(?(条件)真なら|偽なら) という拡張構文の使い方と使用例を教えてください。 なんとなく便利そうなんだけど、意味わかんないし、本みても具体的なことは載ってませんでした。
三項演算子でぐぐれ
ぐぐってみましたが、なんか違うような気がするんですが。。
必要も無いのに新しいからと言うだけで使いたがるなよ醜くなるだけだぞ
何が言いたいのか分からん。
∧||∧ ( ⌒ ヽ 素で間違えた ∪ ノ perlreに載ってるるるるぢゃん…そんなものあるの知らんかたた ∪∪ お詫びに首吊り
>>308 正しくは、
$hoge = 条件式? 真値 : 偽値;
じゃないのか?
316 :
デフォルトの名無しさん :04/11/22 11:15:09
おめでとう
318 :
デフォルトの名無しさん :04/11/25 12:17:36
perl言語に詳しい人がいないスレ
Encodeとjcode.pl どっち使うのがいいですか
サーバのperlが古すぎて、jcode.plでサーバエラー食らったことがある。 対処法をググろうと思っても、上手くググれず困っていたら、 昔、独学用に買った初心者向けのperl本に対処法載っていた。 本は大事にするべきだなと思った。
本スレ?が1000来てるのでこちらで質問させて下さい。 ハッシュの配列をソートしたいのです。 @a = ( {'c' => "mixa",'time' => 1}, {'c' => "fox",'time' => 3}, {'c' => "miaa",'time' => 2} ); このようなハッシュの配列を、timeにてソートしたいのですが $a[0]{'time'} が 1 $a[1]{'time'} が 3 $a[2]{'time'} が 2 なのを $a[0]{'time'} が 1 $a[1]{'time'} が 2 $a[2]{'time'} が 3 として、c側もこれについてくる $a[0]{'c'} が mixa $a[1]{'c'} が miaa $a[2]{'c'} が fox このような結果になるソースを知りたいです。なるべくスマートに書ければ嬉しいです。
my @new_array = sort { $a->{time} <=> $b->{time} } @a;
324 :
デフォルトの名無しさん :04/11/28 19:45:29
PerlではできないRubyでは簡単
志村!上、上!
326 :
デフォルトの名無しさん :04/11/28 21:13:40
Perlについての質問箱はどこ行っちゃったんでしょ。 誰か作ってくらはい。ペコリ
>>323 本当にどうも有り難うございました。
$a->{'time'}で参照出来るのですね
$a{'time'}とやって上手く行かなかったのでてっきりもっと難しいのかと思っていました。
なぜ前者が可能で後者が不可なのか宜しければ説明して頂ければ幸いです。
ハッシュ、リファレンスを勉強品晴れ。 $a{'time'}は%aというハッシュのtimeをキーとする値。 $a->{'time'}は、無名ハッシュ(へのリファレンス)のtimeをキーとする値。
たぶん$a,$bを知らないのでは。
たぶん$を知らないのでは。 たぶんa,bを知らないのでは。
333 :
デフォルトの名無しさん :04/12/02 23:09:39
>329 たぶん、シュワルツ変換が分かれば、分かるようになると思う。 ていうか、私もこないだ覚えたばかり。 続 初めてのperl p101 から 103 のあたり。 ちなみに、シュワルツ変換とは、 ある並びを持った配列があったときに、 その要素が持つ別の属性で持って、並べ替えを効率よくやろうと いうものだけど。
334 :
デフォルトの名無しさん :04/12/03 11:38:10
ハッシをまだ使いこなせていません。例えば、 一つのファイルは、 106 1473 106 764 1762 48 1762 38 1762 91 と、左の数字に対して、いくつかデータがあって、もう一つのファイルは、 106 30 1762 50 と、左の数字に対して一つしかデータがないものがあった時に、 これを、 106 1473 30 106 764 30 1762 48 50 1762 38 50 1762 91 50 のようにハッシュをつかって表示させるのはどうやればいいのでしょうか?
標準入力からデータを読んで、標準出力に結果を吐くCプログラムを perlで呼び出して、データを渡して結果を受け取る方法を教えてもらえませんか? Active perl + WindowsXPです.
exeファイル作って、コマンドとして実行すれば?
パイプを知らんのだろう
パイプマン!
340 :
デフォルトの名無しさん :04/12/09 13:39:06
数値計算で吐き出された数値ファイルのちょっとした計算に使いたいです。 そのためには、整数であるか実数であるかを判定する必要があるのですが、なにかうまい方法はないでしょうか? つまり小数部が0かそうでないかを判定したいということですが、いかがでしょう?
if($Number == int($Number)) {print "Integer\n"} else {print "Not Integer\n"}
たまたま小数点以下が0の実数データだったらどうするんだ
343 :
デフォルトの名無しさん :04/12/10 12:16:59
>>340 の質問だと、小数点以下が0なら整数扱いじゃないのか?
「.」があるかどうかだけ見ればよい
#!perl $number = "5.8";#値を代入 if($number =~ m/\.\d/g) {print "$number";}#小数点以下に数字がある時、値を出力 else{print "いいえ";}#小数点以下に数字がない時、"いいえ"を出力 こんな感じか?
346 :
デフォルトの名無しさん :04/12/11 02:21:28
いや、「小数部が0かそうでないかを判定したい」だろ?
小数点をデリミタにして、数値をスプリット。 小数点以下の部分を全て足して、合計が0か否かをみる。 とすればいいのか?
スプリットしたなら小数点以下が0かどうかだけ見ればいいだろ
>>347 を修正
小数点をデリミタにして、スプリット。
小数点以下の部分が、0か否かをみる。
以上!
これじゃだめか? $num = '23.02'; #値をセット print $num=~/\.(\d+)/ && $1>0 ? '実数' : '整数';
351 :
デフォルトの名無しさん :05/01/15 01:38:33
Perl言語て。
>>341 と
>>349 がシンプルなので、比較してみました。
use Benchmark;
timethis(1000000, sub{ useInt(1.00) });
timethis(1000000, sub{ useSprit(1.00) });
sub useSprit{
my $number = shift;
if([split(/\./, $number)]->[1] == 0){
#print "Integer\n";
}else{
#/print "Not Integer\n";
}
}
sub useInt{
my $number = shift;
if($number == int($number)){
#print "Integer\n";
}else{
#print "Not Integer\n";
}
}
結果:
>>341 の方が速くてコードも短い。ついでに回答も早い。
一行でOK。 print($number == int($number) ? "Integer\n" : "Not Integer\n");
漏れの規則結果(左が速い) 356 > 341 >>>> 356 >>>>>>>> 349
printf qq|%sInteger\n|, ($number != int($number) ? 'Not ' : '');
ここまでするともはや何をしたいのかわからんにょうになる print$number!=int$number&&'Not ',"Integer\n";
>>357 356 > 341 >>>> 356
の辺りが激しく謎。
やっぱ、読めなきゃ意味ねーもんな!
どこかのperl本に『半年前の自分は他人』って書いてあってワラタ。
>>359 までくると、自分で見返しても一瞬なんのことか判らなくなる。
363 :
110 :05/01/17 17:06:43
perlのスクリプトの中でgrepの検索パターンで 日本語を使うにはどうしたらいいんでしょうか? 誰かしているかた教えてください。お願いします。
364 :
デフォルトの名無しさん :05/01/17 17:07:55
>363 NAMAZUをつかえ
365 :
デフォルトの名無しさん :05/01/17 17:10:31
>363 日本語対応のPerlか? 正規表現オプションに日本語コードの種類を指定したか?
366 :
デフォルトの名無しさん :05/01/17 17:28:25
ここは質問箱となにが違うのでしょうか?
369 :
363 :05/01/17 18:15:16
>>364 ,365,366
ありがとうございます!!
がんばってみます!
370 :
デフォルトの名無しさん :05/01/19 14:28:23
>368 呪い返しの術!
371 :
てすと :05/01/19 15:43:17
#include <stdio.h> int main() { printf ("Gonnuduba!\n"); return 0; }
372 :
てすと2 :05/01/19 15:44:12
#include <stdio.h> int main() { printf ("Gonnuduba!\n"); return 0; }
373 :
てすと3 :05/01/19 15:45:53
なるほど。全角スペースならネスティングできるのが わかりました。ありがとうございました。 m(_ _)m
#include <stdio.h> int main() { printf ("Gonnuduba!\n"); return 0; }
ここは、Cスレかと
376が、半角スペースの入力に失敗した為、このスレ終了?
これは成功だろ
s/(\s*$)/てすと/gm;
教えてください。 普通の掲示板の機能にアイコンをつけるのに <FONT SIZE=\"2\" COLOR=\"$icon!!ココガワカラナイ!!">$icon<FONT SIZE=(ry とあるのですがname=iconとかvulue=./icon/icon1.gifとかそういった事は出来ました。 解らないのが、ラジオボタンでチェックを入れるとvulueで指定したリンク画像を表示させる ということなのですが。 誰か教えてくれませんか?
380です。 4行目の文は print " <td valign=\"top\" nowrap> の続きにそういう文があって、そこを直して、iconを追加していたのですけど どうやって挿入とか呼び出しとかするのかわかりません。 selectとかspiceとか色々調べたのですが、いまいち把握できません
板違。WebProg 行け。
変な質問ですみません。
利用のレンタルサーバーはFreeBSDでメールはAPOP POP3 IMAP が使えるらしいです。
今、メールアカウントのパスワードを変更するスクリプトを記述したいのですが、
暗号化の部分がさっぱりわかりません。
レンタルサーバーのコントロールパネルから設定したメールパスワードを直接読み取ってみた時の文字列と
単純にMD5で生成したパスワードが違っていましたので、暗号化方式はMD5でないと推測します。
WEB検索でどのように暗号化しているのか探しましたがみつかりませんでした。
このあたりの情報に詳しい方、ご教授お願いします。
<<板違いの質問かもしれませんが、質問先がわからず、ここにしました。申し訳ありません>>
>>380 =381
perlの前にHTMLの勉強した方が良さそうですよ。(板違いですね。)
& 普通の掲示板って具体的には?
>384 サーバに保存されているパスワード情報の書式は、そのサーバで使用されているメールサーバ プログラムの種類に依存しプロトコルとは無関係。それだけの情報ではエスパーでもなければ分からない。
>>385 ふむふむ。ありがとうございます。
メールプログラムは何かはっきりわかりませんが、同社の他のサービスでは
qmailを使用との事ですので、同じかもしれません。
ところで、メールプログラム依存という事は
メールソフト(クライアント:outlookなど)からサーバーまではパスワードが
プレーンテキストで流れているのでしょうか?
そうなると、そっちの板で質問という事になりますが、
暗号化済で送信を前提としていたので、ここで質問させて頂いておりました。
>>386 言ってることが混乱していないか?
あるプロトコルでパスワードをどの様に送るかはプロトコルに定められている。
クライアントでもサーバーでもプログラムの種類には関係ない。
でないと認証できないだろ?
パスワードの保存方法は各プログラムが好きにすればいいことだろ?
レスありがとうございます。 ここでperlを考えないで、通信で、例えばtelnetなどでパスワード変更しようと 思った場合、メールサーバーのプログラム名(または内容)が判らない場合はどうしようもない、 という事なんですね。 ん〜。困りました。。。。。。
>>388 だからさ、結局何がしたいワケ?
パスワード変更したいならパスワード変更用の手段を実行しろ。
telnetでコマンド実行するなら打とうがperl実行しようか同じだ。
そのサーバーはコマンド打つとき暗号化済みのパスワードを打たないとダメなのか?
>>384 =386=388
perlの前に日本語の勉強した方が良さそうですよ。(板違いですね。)
ぶっちゃけ、コマンド名がわからないんですよ。 コマンド名が判るなら、システムコマンド呼び出しでいいんですけど。
え〜、マジ?それだけ? 訊く板間違ってるし、ググってもすぐ出てくるよ。
リャマ本を読み終えたので、Perlの勉強のために簡単なゲームでも作ろうかと思ってるんですが、 Perlでゲームを作るために参考書ってありませんよね? C言語で書かれた本をPerlに書き換えて作るしかないんでしょうか。
弱い言葉を使うなよ 強く見えるぞ
>>393 アルゴリズムと言語の勉強は互いに独立したものです。
Perlでサイト管理システム作ってるんだが 管理ページにログインした後ってセッション使ったほうがいいの? 単純にパスワードをcrypt()で暗号化して認証しただけじゃまずいよね? ちなみにCGI::Sessionを使いたいけど、 レン鯖なんで一切モジュールの類は使えません。
どなたか優しい人、構文チェックしてもらえまえんか?
エラーログは以下の通りです。
syntax error at ./accesslog.cgi 行番号 18, near "};"
Unmatched right curly bracket at ./accesslog.cgi 行番号 41, at end of 行番号
syntax error at ./accesslog.cgi 行番号 41, near "}"
Compilation failed in require at C:\check.cgi 行番号 54.
Perlへのリンクです。
ttp://www5e.biglobe.ne.jp/~kokotubo/upbbs/img/90.txt
>>397 メモ帳使うな。色付け・インデントできるまともなエディタを使え。このレス読んだ直後に変えなかったら殺す。
17行目#addr → $addr
36行目&error}('0'); → &error('0');
52行目\n\n; → \n\n";
もすかして殺人予告キタ━━━(゚∀゚)━━━ッ!!?
つうかこのスレ3年もってるのか…w
Eclipse+EPICがいいよな、Perlの開発環境。
あるサーバにPerlのパッケージファイルを設置しておいて、他のサーバの Perlで書かれたプログラムがその他のサーバのパッケージを読み込むことは できるのでしょうか? どなたかご存知の方教えていただけますでしょうか
できてもレスポンスが悪そうだなぁ・・・。
404 :
そやな〜 :2005/09/24(土) 13:44:02
402:これはできん。なぜなら、ぱけじ呼んでもその中で使われてるバイナリのライブラリ xx.soなんか読めんやろ。
みなさんの助けが欲しく、やってきました。 今仕事でperl言語をやっています。 アンケートのページの改造をやりたいのです。 質問なんですけど、ボタンをクリックすると、 アンケートのデータが入っているテキストファイルを読み込み、 その読み込んだデータでCSVファイルを作成して、 そのCSVファイルをダウンロードさせたいのです。 どうすればいいでしょうか? 【流れ】 ・データファイルの読み込み ↓ ・CSVファイル作成して、データを書き込む ↓ ・CSVファイルをダウンロードさせる よろしくお願いします。
>>405 仕事でしたらコンサルタントにご相談を。
>>405 問題になりそうな部分
・自動でダウンロード開始させるか?リンククリックさせるか?
・一意なファイル名をどう生成するか?
ヒント:
・リダイレクト
・MD5
これで出来なきゃ転職先探した方が良い。
Perlだけで、ユーザーサイドのoutlook expressの登録アドレスを参照して、メールすることができますか?
>>409 Perl for Win32が稼動しているサーバーだけですよね。
Perl使用可のレンタルサーバーは、どこでもfor Win32なんですかね?? わかる人、教えて。ちょっとスレ違いの質問でスマソ。
>>410 いいえ。むしろUnix系が主流でしょう。
あんまりWin32で Perl動かしてる人っていないんじゃないの? 俺もWin32上で開発してるけど、なんかやりにくい。
winで書いて、サーバに上げて試していますが... それが一般的じゃないんですか? 皆さんLinuxなんですか
hotmailのアドレス帳に自動でアクセスして、そのアドレスにメールを一斉送付することできますか? MAILの内容は、あるURL.で、入力するのは、hotomailのIDとpassword。実行ボタンをクリックで、MAILの送信は、hotmailのサーバーでなく、CGIが置いてあるサーバーのものを使用します。 どのくらいの工数かかりますか? 1日で、できますか?
415 :
デフォルトの名無しさん :2005/10/13(木) 13:46:24
>>414 hotmailよくしらんがやりゃできるんじゃない?
工数はやる人の能力で100倍ぐらい違うのはザラなんで全く意味なし。
1日でできる奴はいるだろうけど、普通に開発会社にたのんだら1人日じゃ
やってくれないだろうね。
416 :
デフォルトの名無しさん :2005/10/13(木) 18:49:00
sedのスレってどこに有るのですか?
@_ = $a->b(); my $result = shift; をまとめて記述することは出来ないでしょうか? ハッシュの場合は警告が出るけど %{ $a->b() }->{hoge} で良いみたいなんですが。
本スレじゃないようなので移動します。
420 :
デフォルトの名無しさん :2005/11/17(木) 15:45:15
cronでperlスクリプトを定期的に起動して、あるサーバが正常に機能しているかチェックしたいのですが、 HTTPサーバに接続して、ページを取得した際に、正常に取得されたかどうかはどのようにしたら分かるのでしょうか?
MD5でも取って比較すれば?
422 :
デフォルトの名無しさん :2005/12/12(月) 00:02:36
わかる方、力を貸して欲しいです。ほんと困ってます。 google web apiをperlで使って、検索語を含むWebページのヒット数、URL を表示するようなプログラムを作りたくて、あるサイトのプログラムを参 考にして作ったのですが、実行したら英語のサイトのURLが表示されて、 明らかに検索語を含んでいません。 もしこうした方がいいという案がありましたら、教えていただきたいです。 自分はPerlをあまり使ったことがなく記述の仕方もいまいちわかっていない 状況です。自分なり本を読んで少しプログラムも書いてみたのですが まだまだのようです。どうかよろしくお願いします。 use SOAP::Lite; use Jcode; my $googleSearch = SOAP::Lite -> service("file:GoogleSearch.wsdl"); my $key='LkML035QFHLEaaFEoFDfPd2VZFDzWGCE'; my $query="とんかつ"; my $result = $googleSearch -> doGoogleSearch($key,jcode($query)->utf8, 0, 10, "false", "", "false", "", "UTF-8", "UTF-8"); #print "About ".$result->{"estimatedTotalResultsCount"}."results.\n"; printf("query=%s %d results\n",$query,$result->{estimatedTotalResultsCount}); for $i(@{$result->{resultElements}}){ printf("%s,%s\n",jcode($i->{title})->euc,jcode($i->{URL})->euc); }
423 :
デフォルトの名無しさん :2005/12/12(月) 03:32:40
>>422 Net::Googleじゃだめなの?それとここにgoogleアカウントは書かないほうがいい
424 :
デフォルトの名無しさん :2005/12/12(月) 09:42:56
>>423 最初のuseの部分をuse Net::Googleに書き換えるということですか?
ご指摘ありがとうございます。
アカウントは実験的に取得したやつなので、問題ないかと思われます。
心配してくださって、ありがとうございます。
ワラタ 2002年かよ。
428 :
デフォルトの名無しさん :2006/02/11(土) 11:07:17
直リンクが不可能なアップローダー cgi あったら便利だと思う 直リンクされたことによって消滅するアップローダは多いからな perl で書かれたものキボン
かなり遅レスだけどhtaccessかその類の物でよくね?
すみません。教えてください。 @commentというところに xxxxxxxxxxxxxxx(4/26) xxxxxxxxxxxxxxx(4/27) xxxxxxxxxxxxxxx(4/28) xxxxxxxxxxxxxxx(4/28) のようなデータがあって、 それの中で日付が当日の行に対して xxxxxxxxxxxxxxx(4/26) xxxxxxxxxxxxxxx(4/27) xxxxxxxxxxxxxxx(4/28) New! xxxxxxxxxxxxxxx(4/28) New! というように行末に「New!」を加えたいんですが どうやったらいいんでしょうか?
431 :
デフォルトの名無しさん :2006/04/28(金) 17:30:45
入門書みながらやってるんですけど、全然わかりません。 $find = index ($comment, $date); if ($find >= 0) { $comment=s/\n/New!\n }
そりゃ酷い入門書だなw my $mon = "4", my $day = "28"; grep {s/\(?<=\Q$mon\E\/\Q$day\E\)/ New!/} @comment;
やべ、間違てたw grep {s/(?>=\($mon\/$day\))/ New!/} @comment;
ありがとうございます。試してみたけど動きませんでした。 日付のところは例に挙げていたのは正しくなくて正しくは xxxxxxxxxxxxxx(4/26 xx:xx) xxxxxxxxxxxxxxx(4/27 xx:xx) xxxxxxxxxxxxxxx(4/28 xx:xx) xxxxxxxxxxxxxxx(4/28 xx:xx) という感じで時間も入ってました。 とりあえず時間の部分を削ってやってみましたがうまくいかず・・・
じゃあこれで。 grep s/(?>=$date)/ New!/, @comment;
すまん今起きたばっかりで寝ぼけていたようだ。すまん. これで秒が入ってても大丈夫だと思うよ。 grep {/$date/ and s/$/ New!/s} @comment;
おお、出来たっぽいです!! マジでありがとうございます。 マジで泣けてきます
438 :
じょー :2006/05/27(土) 16:04:39
サーバーのシェルスクリプトをsystemコールして動かないんですが、どうしたらよいんでしょうか? 初期設定が出来てないとかエラーが出てます・・・
初期設定してみなされ
正規表現で、目でみると実際は空行に見えるが、tabが入っていて 実は空行ではない。のを検索するにはどうしたらいいですか? その他の空行ではない行でtabが入っていても無視する。 というものです。
^\t+$ こっちでも怒られたら悪いがもう答えない。
1行に同じ単語が3度以上表れる行をperl正規表現で書くとどうなりますか? わかる人お願いします。
正規表現1本じゃ書けない。コーディングが必要。
word.*?word.*?word じゃだめかなw
/^.*?(word.*?){3,}$/
これではどうか? (\Qword\E).*?$1.*?$1
javaのXMLEncoderで書き出したファイルをXMLDecoderライクに 扱えるperlってありませんか?
449 :
デフォルトの名無しさん :2006/07/02(日) 19:03:01
$hoge = 'A B'; $hoge =~ s/ /\\E\\s\+\\Q/g; if( 'A B C' !~ m/\Q$hoge\E/ig ){ print $hoge; } if( 'A B C' !~ m/\QA\E\s+\QB\E/ig ){ print 'aaa'; } 上三行みたいな事がしたいのですが うまくいきません お知恵を拝借できませんか?
もっとスマートなやり方もあるとは思うが、 my @data = map { '\Q' . $_ . '\E' } qw( A B ) ; my $str = 'if ( \'A B C\' !~ m/' ; $str .= join '\s+', @data ; $str .= '/ig ){ print \'hogehoge\' . "\n" }' ; eval $str ;
それだとAの部分に'$a'とかが混じっていたときに期待しない動作をします
まあ、そうだろうねw そこらは map 中でエスケープしちゃえばいい。
Text::CSV_XSについて教えてください。 man Text::CSV_XS.3pmを読んでも解決しませんでした。 $csv->parse($_); @columns=$csv->fields(); としてCSVファイルの中身を@columnsに格納できるのですが、@columnsは普通の配列じゃない みたいで、添え字指定で任意の位置(行と列を指定した位置)のデータを取り出すことができません。 foreach $factor (@columns){ print $factor,"\n"; } や foreach $factor (@columns[0]){ print $factor,"\n"; } はできても、$columns[0][0]などではアクセスできません。このfieldsメソッドで作成された配列は どのような構造になっているのでしょう。ご教示いただければ幸いです。
>>453 Text::CSV_XSはCSV1行を扱うためのもので、CSV複数行で構成される2次元の表を
扱うようなものではない。
>>453 ありがとうございます。自分の勘違いに気がつき突破口が開きました。
while($line=<IN>){
}
の中で処理していたのを忘れて悩んでいました。感謝です。
456 :
デフォルトの名無しさん :2006/08/16(水) 19:20:08
あるフォルダの中にある全てのファイル名を拾いたいのですが、やり方がわかりません。 やり方のわかる方はお教え願います。
456 すいません解決しました。
大文字小文字変換に関する質問です。 例えば、CURR OPIN NEUROL NEUROSURGという文字列をCurr Opin Neurol Neurosurgと変換したい と考えています。 $line="CURR OPIN NEUROL NEUROSURG"; foreach $i (split(/ /,$line)) { push(@w, ucfirst(lc($i))." "); } print @w; とするのは冗長である気がするのですが、もっと賢く簡潔にやる方法ないでしょうか。
>>458 1バイトごとのビット演算なんてどうかしら?
0x4F で and して 0x60 で or するとか。
・・・でもucfirstしなきゃか。orz...
$line =~ s/(\w+)/ucfirst lc $1/ge;
>>460 おぉぉぉぉ素晴らしい!ありがとうございました。
なるほど、なるほど。(\w+)とgを組み合わせたらよかったんだ。
462 :
デフォルトの名無しさん :2006/09/08(金) 18:47:31
データの中に含まれる$を\$とエスケープしたいのですが、 $hoge =~ s/\$/\\$/g; とすると Final $ should be \$ or $name at fuga.pl line 53, within string とエラーになります。$を\$に置換するにはどうすればよいのでしょうか。
463 :
462 :2006/09/08(金) 18:58:57
すみません。解決しました。 =~ s/\$/\\\$/g;
ちょっと疑問に思ったんだが、MovableTypeとかPerlで書かれてるソフトウェアってたくさんあるけど、あれってソース公開しなくていいのかな? 絶対GPLのライブラリとか使ってると思うんだが…
>>464 Perlについての質問箱スレに回答しておいたよー
466 :
デフォルトの名無しさん :2006/11/18(土) 02:19:05
ハッシュの配列をソートしたいんだが、どうしたらエレガントにできますか? my @hogename = { 'apple', 'orange', 'peach' }; my @hogeval = { 200, 100, 400 }; # # ここで、@list_of_hash の配列を作る # my @list_of_hash = (); for($i=0; $i<@hoge; $i++) { my $hash = { name =>@hogename[$i]; #要素名 val =>@hogeval[$i]; #要素の値 }; push(@list_of_hash,$hash); } # @list_of_hash を要素の値の昇順にソートするエレガントな方法は? # いまさっき、いわゆる「馬鹿ソート」をコーディングしたんだけど # エレガントな方法がきっとあると思う。 #
map { $_->[0] } sort { $a->[1] <=> $b->[1] } map { [$_, $_->{val} ] } @list_of_hash;
468 :
デフォルトの名無しさん :2006/11/25(土) 14:01:05
sub decode { my($val) = @_; $a=int($val/(2**40)); $b=(int($val/1048576))%1048576; $c=(($val-($a*1048576+$b)*1048576))%1048576; return ($a,$b,$c); } 32ビット以上の整数$val下位から20ビット、20ビット、10ビットを別な変数$c,$b,$aに取り出す できるだけ高速なdecode関数を作るとして、もっとよい書き方はあるんでしょうか?
>>468 その関数自体バグってないかい?
$aには41ビット目から上が全部入ってるけど。
>>468 先に下の20ビットを抜き出した後で残り30ビットを普通に & や >> 使って求めればいいんじゃないだろうか。
つまり、こう。
# 下 10 ビットを $c へ入れる。
$c = $val % (2**10);
# 元の値を10ビット右シフト
$val = int($val / (2**10));
# 下 20 ビットを $b へ入れる。
$b = $val & ((1 << 20) - 1);
# 残り 20 ビットを $b へ入れる。
$a = ($val >> 20) & ((1 << 20) - 1);
但しこのままだと元の値が 52 ビット以上あった場合は 32 ビット用に
コンパイルされた Perl だと正常動作しないと思います(というのは
最初の20ビット右シフトをした段階で32ビット以上存在することに
なるためです。値の保持はできてもシフト演算でまともな結果を返さない
かも知れません)。
元の値が52ビット以上だったとしても正常動作させるためには最初の
20ビット右シフトをやった直後に残り30ビットだけを残して上の桁を
なくすなどの処理が必要です。
>>468 sub decode {
my ( $val ) = @_;
# 40bit右シフトした値の下位10bit
my $a = ( $val >> 40 ) & 0x3FF;
# 20bit右シフトした値の下位20bit
my $b = ( $val >> 20 ) & 0xFFFFF;
# 下位20bit
my $c = $val & 0xFFFFF;
return ( $a, $b, $c );
}
これでどうさね?
もちろん処理系は64bitなんだろね?
>>471 IEEE754の64ビット倍精度(よく32bitマシンのC言語のdoubleで使われているやつ)
だと仮数部が52ビットある。
http://ja.wikipedia.org/wiki/IEEE754 で、Perl は普通の 32 bit CPU の PC で普通にコンパイルすると数値はこれ
使ってると思うので、64ビット環境でなくても50ビットの整数は変数に入れ
られる。ただ問題は32bitを超える値の場合にそのままシフト演算ができない
ことにある。これは多分シフト演算をする時に32bit整数に変換してから行って
いるからだ。
観客としてはもとのより速くなったかどうかが知りたいわけですが ベントとったひといない? 手元のperlは64bit整数使えないので自分でとるのはちょっと大変 なのです。
474 :
デフォルトの名無しさん :2006/11/29(水) 19:48:56
my ($c,$b,$a)=unpack("B20B20B10", $val); 32bit環境だとこれもうまく動作しないみたいです。
475 :
デフォルトの名無しさん :2006/11/29(水) 19:58:08
perlの64ビット倍精度数値の仮数部のビットを一部でも抜き出すのって無理なのだろうか?
>>473-475 >>470 読んでないのか?
32ビット以下にしてしまえばビット計算できるんだから最初だけ
普通に計算して残りをビット計算すれば良いんだよ。
>>476 ベンチは別の方法で回避したのを測定してもそれはその方法のベンチで
あって本来測定したかったものではないからだめだろ。
数値を読んだらまず特定のバイナリ形式にpackして、 それから unpack B10 とかで取ればいい。
479 :
デフォルトの名無しさん :2006/12/01(金) 22:04:23
簡単には書けないから468のようなコードになっている。
>>479
演算回数が同じならビット演算のほうが浮動小数演算よりはやい。
ベンチとるかどうかはコードを見てからだな。
>>473 環境に依存するコードでよければ高速になるようだが、32bit環境でも
動作するコードで高速なコードがかけるかどうかは、50ビットの値から
32ビット以下の複数の値を取り出すエレガントな書き方があるかどうかだ。
シフト、論理演算、モジュラ、pack全部使えないのだから、だめなんでは。
入力データの形式が文字列なのかPerlのよくわからん数値なのかはっきりしてほしい。
環境依存でいいならいくらでも解決方法あるよな。 たとえばWin32ならCのDLL一個書いてWin32::APIですぐだ。さすがにコード貼る気はないが。
>>481 unpackは"d"とかも駄目なのか?まだ使えないという結論はでてない。
468,471のコード見る限り64ビット倍精度で50ビットの数値が入力されるのでは。
>>482 環境依存の場合は64ビット環境で471のコードでOK。
>>483
#!/usr/bin/perl use bigint; $hexstr="100000000"; print hex($hexstr),"\n"; というスクリプトを実行すると、 Integer overflow in hexadecimal number at ./test1.pl line 5. 4294967296 と警告が出ます。結果は正しいのですが。 本来どうするべきものなのですか。
use Math::BigInt; $hexstr="100000000"; $b = new Math::BigInt("0x$hexstr"); print $b,"\n"; 小文字のbigintは気づかぬところでバグが出るから俺は好きじゃないな。
最近見たソースの中に@{$hoge[$num]}というような表記をしている箇所が 数カ所ありました。 @{}って何を表しているのでしょうか?^^; それっぽいキーワードなどGoogleに入れてみたんですが、 適切なサイトを見つけることができず、どなた教えて頂けると助かります。
変数名とかを変数にしたいときの書き方 @LIST =(1,2,3); $hoge = 'LIST'; print @{$hoge};
>>488 おぉ、なるほど。
そんな書き方があったんですね(^^;
ありがとうございます。
>>487 配列へのリファレンスをデリファレンスしているのでは。
$hoge[$num] = [1,2,3];
print join(",", @{$hoge[$num]});
>>488 いまどきシンボリックリファレンスを教えないように。
>>487 てか、その程度のことはPerlの入門書に書いてあると思うのだが。
492 :
デフォルトの名無しさん :2006/12/26(火) 16:00:54
CGI.pmを使って、下と同じような処理をするにはどのようにすれば良いのでしょうか。 read(STDIN, $temp, $ENV{'CONTENT_LENGTH'}); @query = split(/&/, $temp); foreach (@query) { ($name,$value) = split(/=/); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $query{$name} = $value; }
ググれば一発だと思うんだけど・・・
494 :
デフォルトの名無しさん :2006/12/26(火) 16:35:28 BE:474948465-2BP(1)
$q=new CGI; @query = $q->param; とか @query = param; とか試したけどうまくいかない。 (CGI.pmバージョン3.25)
欲しいのはこれか? %params = $q->Vars;
あなたは神だ
PCの解像度を取得できませんか?
>497 とりあえず環境依存だと思う。
>>497 解像度というのは、デスクトップの大きさのこと?
Windows なら、GetWindowRectというAPIで取れる。
Perl での使い方は適当にググって調べてちょ。
やっぱそのキャラのファンか・・・
青ラクダ本書いてたときはSamurai Xだっけ?
>>497 $| = 1;
print "PCの解像度を入力してください >> ";
my $kaizoudo = <STDIN>;
Win XPで”デフォルト”のプリンター名取得できませんか? Win32::Printer::Enum で全てのプリンタ名のリストはできるのですが。。。
Win32::APIがあるから、あとはそっち系のスレで聞け
つーかマルチしてね?その質問
いろんなところで見るな。 WinAPIスレで親切な人が教えあげたみたいだが
>>504 print "デフォルトのプリンター名を入力してください。\n";
my $default_printer_name = <STDIN>;
パールが出してくれるメッセージの解説はどこかにありますか?
perldoc perldiag
>>511 さっそくすみません。
man perldiagでもいいんですね。助かりました。
513 :
デフォルトの名無しさん :2007/04/23(月) 18:12:33
514 :
デフォルトの名無しさん :2007/05/28(月) 23:35:26
IP(ドメイン名)からアクセスポイントを取得するにはどうすればよいですか?
アクセスポイント・・・アクセスポイント?
IP(ドメイン名)・・・IP(ドメイン名)?
オブジェクト指向で、objectAのメソッドfooからobjectBのメソッドvarを呼ぶ場合って、 下記みたいな書き方でいいのかな?一般的にはどう書くの? ----main.pl -略- package main Use classA; Use classB; objectA = new classA; objectB = new classB; -略- ---- ----classA.pm -略- package classA; sub foo { my $self = shift; $self->{val} = $main::objectB->var('param'); } -略- ----
classA.pm から use classB; すりゃあいい。 $main:: なんかイラネ
520 :
518 :2007/05/29(火) 18:14:23
>519 dクス。 反省。質問を単純化しすぎだった。 オブジェクト複数を互いに呼び合えるように宣言するにはどうすれば良いか?って話なんだけど・・・。 >classA.pm から use classB; すりゃあいい。 した場合、objectAからobjectBのメソッドを呼べるけどobjectBからobjectAのメソッドを呼んだ場合どうなるんだろ? 他には、objectCやらobjectDが出てきた場合どうなるんだろ? classA.pmで my objectB=new classB;したobjectBと、classC.pmでmy objectB=new classB;したobjectBは別物だよね? 漏れ、何か勘違いしてる? 漏れが思いつく範囲では、 ・mainパッケージのobject保持変数を参照する(>518に書いた方法) ・各objectをお互いにセットする ぐらいなんだが、一般的な書き方ってどうなのかと思って聞いてみました。
何がしたいのかよくわからんが、 それはメソッドを呼び出すのではなく、fooに引数として渡せばよいだけのことでは? あるいは各クラスにクラスデータとして持たせるとか、、、 package SomeClass; my $objectA = ClassA->new(); my $objectB = ClassB->new(); 以下、メソッドの定義(メソッド内で$objectA,$objectBを使う)
522 :
518 :2007/05/29(火) 19:56:38
実際にやりたい事: DBオブジェクトやセッションオブジェクトと画面表示オブジェクト(画面の種類毎にいくつかある)の連携 セッションオブジェクト(sessionObj)に格納したデータを画面表示オブジェクト(AdispObj)に渡して表示するのにメインで、 $AdispObj->setdata('dataA',$sessionObj->getdata('dataA')); $AdispObj->setdata('dataB',$sessionObj->getdata('dataB')); $AdispObj->displayAll(); 見たいな事をしていたが、 メインが本筋の流れの制御以外の事を大量に抱え込むのでソースが見づらくなってる。 で、画面表示オブジェクトのメソッドの中でセッションオブジェクトやDBオブジェクトから データを直接取り込んだらどうかと思ったわけ。 オブジェクト指向ってオブジェクトとオブジェクトがメソッドでやり取りして処理を進めるものなんだろ? C++チョットかじった程度で、それから7年以上経ってるんで実際どうやってたか忘れてるんだが、 その辺のコーディングスタイルの標準がわかれば良いかと思ったんだ。 SomeClassとか、mainとは別のパッケージを作るのが一般的なの?
オブジェクトを使う目的のひとつがカプセル化だから、結局セッターやゲッターを介してしか クラス間でデータのやりとりはできんのよ。 mainでその操作を隠蔽したいのであれば、各クラスに静的な領域を作り、 完全修飾で直接アクセスまたはメソッドを介したアクセスをするしかないわな。 package Adisp; sub displayAll
すまん、途中で送ってもうた sub displayAll {
shiftキーうかつに押すとミスりやすいな sub displayAll { Session->new->getdata($param)でSessionクラスからデータをロード 以下処理 } 結局、最初に自分で書いたのが多少みにくくてもベストではないのかな
526 :
518 :2007/05/29(火) 23:34:42
実装の参考にはならんかもしらんが、 perlboot, perltoot, perltooc, perlbot 読めば?perl の OOP が(変態的な部分を含めて)載ってるよ。<- 当たり前 実装でハデにがちゃがちゃやってんのは、俺の専門分野の奴なら知ってるけど 専門外の人にはとてもじゃないけどお勧めできんので。スマン。
オブジェクト同士が互いを呼び合うというのは、あんまりやるべきではない。 クラス設計をまずは見直すべき。 OOなら、そういうのはインターフェースを使うんだがな。 Perlでそこまでするのはどうなんだろうな。
>>522 みたいのは、デザインパターンだと、コマンドパターンの典型だな。
うむ
531 :
518 :2007/05/31(木) 01:29:27
皆様の意見大変参考になりました。勉強しなおしてきます。m(_ _)m
>526 どっかで、perl OOPのお手本を見たければ、CPANに登録されてるMail関連を見ろって書いてあった。
PerlでOOPしたいなら、まずは perldoc boot perldoc toot perldoc tooc perldoc perlbot あたりを読んどけ
PerlでOOPしたいなら、Rubyに乗り換えた方がいいだろ。
> PerlでOOPしたいなら、Rubyに乗り換えた方がいいだろ。 Ruby に乗り換えると、Perl で OOP をしたいとう願望を達成できるのか? いまいちよく分からないので、このスレを全部使ってでもいいから説明してくれ。
536 :
デフォルトの名無しさん :2007/07/09(月) 11:27:14
HTML::Template使ってるんですけど、 <TMPL_INCLUDE NAME="ファイル名"> のファイル名を 動的に変更できませんか?
もろちんできますょ
538 :
デフォルトの名無しさん :2007/07/09(月) 18:08:39
そこをなんとか、ご教授を。
539 :
デフォルトの名無しさん :2007/08/11(土) 01:23:31
Windows XP で Active Perl を使用してるのですが、 漢字のとりあつかいについて、ちょっと行き詰まったので教えてください。 まず分かったこと: ・Perl で Shift JIS を扱うのは自殺行為に等しい。 ・EUC は C言語や Perl 専用につくられたコードなので、 できればそっちを使うのが良いが Windows ではかえって混乱するだけ。 ・今どきなら、UTF-8 を使うのが Cool。 Java も PHP も MySQL も、 UNIX 由来の言語はみな内部で UTF-8 処理しているから。 ・ちなみに Windows は内部処理では UTF-16LE を使用しており 通常の API と UNICODE 版API の2種類を持っている。 ファイルシステムもUNICODE化されており、Shift JIS では無い文字がファイル名に使えたりする。 で、当然、use utf8 でバリバリ書こうと決心したのですが・・・ もうメチャクチャです。漢字ファイル名のファイルがぜんぜんオープンできないんです。 最初は画面表示も化けまくってたのですが、これは binmode STDOUT,":encode(cp932)" で解決しました。 でも print __FILE__ で化け化け、print $ARGV[1] も化け化け。readdir したファイル名も化け化け。 readdir で取ってきたファイル名でファイルをオープンすることもできず、もうどうにもなりません。 java、vbscript、jscript、php、c、c++、C#、j# もちろんBATファイルも、perl 以外の言語なら何も問題なくできる事が perl に限って、漢字ファイル名が開けない、-f とか -d でもテストできないんです。 何か方法があるのでしょうか? open FILE, "<:encode(cp932)", "月間売上表.txt" じゃダメなんですかね・・・
>>539 あんたが「漢字ファイル名」と呼称しているものがPerlからどう見えているのか
調べればいいだろ。
542 :
デフォルトの名無しさん :2007/08/11(土) 15:01:57
やっぱダメっす。 問題を切り分けるために、たった2行だけの短いプログラムにしてみました。 use utf8; open FILE, ">:encode(cp932)", "月間売上表.txt" or die; それでも 「Died at test.pl line 2.」 って怒られます。 こんなに短いプログラムの、いったいどこにバグがあるのか見当がつきません。 バッチファイルで ECHO 7月,300まんえん>月間売上表.txt だと何も問題なくファイルが作られるんです。だからディスクのエラーでは無いと思います。 もうワケワカメです (T_T)
「表」が原因だな
use utf8; use Encode qw(encode); use open ":utf8"; open FILE, ">", encode("cp932","月間売上表.txt") or die; print FILE "Perlなんて、つかっちゃらめぇ><";
545 :
デフォルトの名無しさん :2007/08/12(日) 00:37:08
>>544 おお、ネ申光臨!
バッチリです。そんな裏技があったとは知りませんでした。的確なご回答に感謝します。
ただ、そこまではウマクいったんですけど、処理を追加したらまた問題が発生しました。
12行目の rename で die してしまうんです。
(rename をコメントアウトすれば動くんですが、データのバックアップができなくなるんで・・・ちと不安)
use utf8;
use Encode qw(encode);
use open ":utf8";
open FILE, "<", encode("cp932","月間売上表.txt") or die;
@data = <FILE>;
close FILE;
foreach (@data) { $_ = "(済)" . $_ } # テキトーにデータ加工処理
if (-f "月間売上表.bak") { unlink "月間売上表.bak" or die }
rename "月間売上表.txt", "月間売上表.bak" or die; # <-- ここで死ぬ
open FILE, ">", encode("cp932","月間売上表.txt") or die;
print FILE @data;
close FILE;
……(絶句) 知的障害者が来ているようだな
547 :
デフォルトの名無しさん :2007/08/12(日) 02:19:17
svgをjpgなどに変換したいのですが、よく分からず困っています。 librsvgなどを使用するんでしょうか?
>>546 頭の弱い子によくありそうなことじゃない。
障害って程でもなかろう。
> ・EUC は C言語や Perl 専用につくられたコードなので、 > できればそっちを使うのが良いが Windows ではかえって混乱するだけ。 クマーーーー
そもそもマイクロソフトが作ったインターネットでPerlを使うのは 法律違反すれすれなんだが、今さらそんな事を言ってもしょうがない。 だけどEUCの使用は明白な犯罪。やめた方が良い。
>>550 ∩___∩ |
| ノ\ ヽ |
/ ●゛ ● | |
| ∪ ( _●_) ミ j
彡、 |∪| | J
/ ∩ノ ⊃ ヽ
( \ / _ノ | |
.\ “ /__| |
\ /___ /
>539 無茶苦茶言ってるなw PerlでもShift_JISはよく使うし、状況次第でiso-2022-jpでもeuc-jpでも使うよ。 utf8は扱いづらい。他のコード同様、それを使うのが自然な時にだけ使う。
> utf8は扱いづらい。 老人?
554 :
デフォルトの名無しさん :2007/08/13(月) 17:28:27
utf8 はたしかに使いづらいよ。現に
>>545 のようなバカが沸いてきてるし。
誰も
>>545 の謎が解けないようだから代わりにオレがバカの相手をしてやる。
いいか、正解は、こうだ。日本語にはすべて encode("cp932",○○) をつける。
use utf8;
use Encode qw(encode);
open FILE, "<:encoding(cp932)", encode("cp932","月間売上表.txt") or die;
@data = <FILE>;
close FILE;
foreach (@data) { $_ = "(済)" . $_ } # テキトーにデータ加工処理
if (-f encode("cp932","月間売上表.bak")) { unlink encode("cp932","月間売上表.bak") or die } # ここ
rename encode("cp932","月間売上表.txt"), encode("cp932","月間売上表.bak") or die; # ここ
open FILE, ">:encoding(cp932)", encode("cp932","月間売上表.txt") or die;
print FILE @data;
close FILE;
print encode("cp932","月間売上表.txt を更新しました。\n");
どうだ、cp932 だらけのすばらしいコードだろ?実にゲージュツ的だ。惚れ惚れするね。
これを業界では 「encode cp932 地獄」と言う。割と有名なハナシだ。良く覚えておけ。
> 545のなぞが解けない マジレスするともうutf8ネタは繰り返し繰り返し出るネタで答えるのに飽きたネタだからスルーしてるだけよ…
>>554 どこの糞業界だよ、それ
そもそもutf8なファイル名リテラルで使ってる時点で間違いに気づけよ
557 :
デフォルトの名無しさん :2007/08/13(月) 23:45:19
>>556 それを言うなら、「そもそも perl 使ってる時点で間違いに気づけよ」 だな。
> それを言うなら、「そもそも perl 使ってる時点で間違いに気づけよ」 だな。 そうか。代替案があるなら提示してくれよ。 どうせ煽ってるだけの馬鹿なんだろうけど。w
559 :
デフォルトの名無しさん :2007/08/15(水) 07:12:37
>>558 それは
>>556 に言えよ。代替案があるなら提示しろとな。
どうせ煽ってるだけの馬鹿なんだろうけど。w
560 :
デフォルトの名無しさん :2007/08/15(水) 22:05:57
utf8って書いたらスクリプトをUTF-8で保存しろよ。 それで全て解決だろ。
561 :
デフォルトの名無しさん :2007/08/15(水) 22:10:55
562 :
デフォルトの名無しさん :2007/08/16(木) 02:15:50
あららんらんらん〜〜〜
>>554 は実際に utf8 で保存して、ちゃんと動作テストを済ませてありますよ。
これ以上弄りようの無い、カンペキなクソperlコードですがなにか?
>>560 バカですか?つうかバカですか?いやむしろバカですか?
>>561 以下同文
まぁいずれにせよ、質問に回答はしない、他人の回答はなじる罵倒する。
でも自分は代替案も何も出せない。
他の言語スレには見られない、Perl スレの決定的な特徴。
no utf8 も使えないバカが粘着してることは分かった
564 :
デフォルトの名無しさん :2007/08/20(月) 01:31:42
>>554 それでも良いんだけど、
ファイル名があっちこっちに散乱しているのは美しく無いですよ。
こんな風に手直ししてみてはいかがですか?
use utf8;
use Encode qw(encode);
binmode STDOUT,"encoding(cp932)";
$filename = "月間売上表.txt";
$backup = "月間売上表.bak";
open FILE, "<:encoding(cp932)", encode("cp932",$filename) or die;
@data = <FILE>;
close FILE;
foreach (@data) { $_ = "(済)" . $_ } # テキトーにデータ加工処理
if (-f encode("cp932",$backup)) { unlink encode("cp932",$backup) or die }
rename encode("cp932",$filename), encode("cp932",$backup) or die;
open FILE, ">:encoding(cp932)", encode("cp932",$filename) or die;
print FILE @data;
close FILE;
print $filename," を更新しました。\n";
565 :
デフォルトの名無しさん :2007/09/23(日) 01:29:05
素人質問で申し訳ありません〜!!cpanシェルで install XML::XBEL を実行すると、途中で Install Module::Build now from CPAN? [y] と出るので、yをおしました そしたら最後に /usr/bin/make install -- OK *** Cannot install without Module::Build. Exiting ... Running make test Make had some problems, maybe interrupted? Won't test Running make install Make had some problems, maybe interrupted? Won't install と出て、インストールできませんー! どうか解決のアドバイスをください・・・・。。。。
>565 Module::Build がインストールできていないようなので、ログのもっと前の方を調べるべき。
567 :
デフォルトの名無しさん :2007/09/23(日) 10:29:56
568 :
565 :2007/09/23(日) 12:52:59
Module::Buildを手動でインストールすることにしまして、 make、make testは通ったんですが、その後のmake installで ERROR: Can't create '/usr/local/lib/perl5/site_perl/5.8.8' Do not have write permissions on '/usr/local/lib/perl5/site_perl/5.8.8' とエラーが出ました。 レンタルサーバー上での作業のため、一般ユーザ権限しかないので 怒られるのは当然なのですが、インストール先(?)を変更するには どうすればよいのでしょうか?
>>568 makefileくらい自分の環境に合わせて編集しろよw
570 :
565 :2007/09/23(日) 13:42:15
低レベルの質問で申し訳ありません。 webで調べたのですが、どうしても書き方がわからなくて。 installdir=/home/(mydir)/lib/perl といった感じに設定すればよいのでしょうか?
Perl初心者の質問です。 CSVにデータを書き込むにはどうすればいいでしょうか? モジュールで読み込むことには成功しました。 他のモジュールをいくつか試したのですが上手くいきません・・・ ご教授お願いします。
573 :
デフォルトの名無しさん :2007/10/27(土) 03:07:13
「うまくいきません」じゃわからんよ。 とりあえず、いちばん簡単なのは、ファイルをオープンして print 文で。
あ、改造はWebProg板かorz
>>575 改造だからとかじゃない。webプログラミングはWebProg板。
577 :
デフォルトの名無しさん :2008/01/11(金) 00:10:36
ファイルとスカラーを引数に実行するプログラムを作りたいです。 以下のように書くと、ファイルは読み込んでくれるのですが、スカラーがないと言われます。 whileのところが悪いと思いますがどう書いたらいいでしょうか?お願いします。 &data_input($line, $num); sub data_input{ ($refline, $refnum) = @_; while ($refline = <>) { chomp $refline;
578 :
577 :2008/01/11(金) 00:32:09
shift を使って解決しましたm(__)m
579 :
デフォルトの名無しさん :2008/01/11(金) 14:43:33
このスレでいいのかどうかわからんけど、質問させていただきます ・WindowsのActivePerlで、cpanを使ってHash::Mergeをインストールしたい ・Cloneが必要らしいから、先にこっちをインストールしよう ・cpan Cloneすると、make testの段階で「msvcr90.dllが見つからない」とエラーが出る ・msvcr90.dllまでのパスを通すと、今度はCランタイムエラー(R6034)が出る ←今ここ もうさっぱりわからない 環境: WindowsXP Pro SP2 ActivePerl 5.10.0 Visual C++ 2008 Express Edition
>>579 若干スレ違い気味だけど、自分の場合(XpSP2+VC2005)での対処法。
perl Makefile.pl
で出来上がった Makefile のなかの、実際にコンパイルが走ってる行で、
”-MD” となっているところを全て ”-MT” に変更する。
でさらに、リンクライブラリが列挙してあるところの
”mscvrt.lib” を ”libcmt.lib” に変更してから、nmake && nmake test を掛ける。
これは、詳しくはMSDNのリファレンスを見てもらいたいんだけど、
.Net がWindowsに入って以降、標準のCランタイムライブラリが、
”libcmt.lib”から”msvcrt.dll”に変更された。(VCでのデフォルトになった。)
この”msvcrt.dll”は、実体は”msvcr80.dll”(XP+Net2.0+VC2005の場合)へのダイナミックリンクのローダーなんだけど、
Windows上で有効なCランタイムライブラリが、以前(VC2003以前)は、”libcmt.lib”からのstatic_linkだったのが、
2005から、”msvcrt.dll”へのdynamic_linkへ変更された模様。
(だから、以前VC2003で書いてたCソースをそのままVC2005でコンパイルしなおしても、動かないことが頻発)
ウチで以前いろいろ試した時は、”*.manifest”があっても、ロードしてくれなかったり、
実際コンパイルしたマシン上では正常に動作しても、それをパッケージングした.ppmを、他のマシンに
インストールして実行したりすると、そちらと同じように「msvcr80.dllが見つかりません」みたなエラーが出て実行出来なかった。
(しかも、その他マシンに、.Netインストール済み且つVC2005もインストールして、コンパイルしたマシンと同じ 環境設定しても、同じエラーが出た。)
msvcrt90ってことは、.Netは3.0かな?OSはひょっとしてVistaかな?
VC2008はまだ触ったこと無いんで詳しくはわからないけど、まだこの方法でいけると思う。
でもMSDNによると、将来的には”libcmt.lib”のstaticlinkオプションを切って、全て”msvcrt.dll”での動的ロードに切り替えて行く方針らしい。
581 :
デフォルトの名無しさん :2008/01/11(金) 17:38:17
>>580 その通り置換したらいけたー
ありがとう。勉強になったよ
582 :
デフォルトの名無しさん :2008/01/29(火) 11:07:02
perl-baseパッケージというのは以下のように説明されていますが、
Debian -- sid の perl-base パッケージに関する詳細
http://packages.debian.org/ja/sid/perl-base 基本的な部分だけ入っているというのは具体的にどういう意味なんでしょうか。
1. perlパッケージが入っていればperl-baseパッケージを入れる必要がないのでしょうか。
2. perl-baseを入れればperlインタプリタが一緒にインストールされるのでしょうか。
(perlコマンドが使えなかったのでそういうわけでもなさそうですが。)
3. perl-baseを入れると何らかのモジュールがインストールされるのでしょうか。
4. perl-baseだと具体的にどういうものが不足するのでしょうか、可能性として。
以上お願いします。
質問箱に書き込めないので、 split で分割して foreach で処理しようとしましたが、順序が元の文字列と変わる場合があります。 これが仕様なのかわかりませんが、どう対処すればよいでしょうか?
コードさらせよ
>>584 なぜ順番が変わるのかを突き止めて、その原因を取り除く。
>>585 >>586 レス有難うございます。
コード自体はそれほど長くないのであげることはできますが、必要なデータファイルが
ここに挙げるには大きすぎるので要点だけを書き射抜いたところ、再現しません。
仕様ではなさそうなので、ちまちま検討してみます。
経験的に、そういう場合は同じところを最初からもう一回書き直せば直る。
split に使う正規表現が間違ってるから 期待とは違う分割をされちゃって 順序が違ってしまったように見えてる、とかね
684です。 お騒がせいたしました。 ちまちま検討した結果、なんともはやお粗末なバグであることが判明しました。 split 後の各ワード(日本語)は漢字、ひらかな、カタカナ、数字、アルファベット(全角・半角) なのですがその語が辞書ファイルにあれば該当する語を返し、ない場合はカタカナ(全角) である場合はひらかなにして返すと言うくだりで、件のひっくり返り事件がおきました。 この辞書ファイルというのがカタカナ・ひらかな変換ができていない時に構成されて そのときどう言う訳か具体的には「ラッツ&スター」の「ラッツ」が「すたー」に、「スター」が 「らっつ」に登録されていたのです。 (continue)
584の間違いでした。 続き、 したがって、要点だけを抜き出したルーティンではこの現象が再現されなくて当然です。 (各ワードをプログラム中に設定し、それをsplitして単にひらかな変換しjoinし出力) まことに申し訳ありません。 しかし、splitの仕様かとも思ってこちらに質問し、レスの感触からそうではなさそうだと わかり遠回りせずに済みました。有難うございました。
誘導してくださいお願いします(´;ω;`) 下記のように代入した場合に、「aa」と「bb」の部分にあたる要素名一覧を取得する方法はありますか? $hash{'a'}->[0]->{'aa'} = 100; $hash{'a'}->[0]->{'bb'} = 500; @key = keys($hash{'a'}->[0])でできる? とか思ったばかな自分にご教授お願いしますm(_)m
keys %{$hash{'a'}[0]}
594 :
592 :2008/02/04(月) 21:01:27
>>593 おおおお━━━━(T▽T)━━━━!!
できました!
%{ }で囲えばよかったんですね…
勉強になりました!
ご協力感謝いたします。
どうもありがとうございましたm(_)m
sedの上位バージョンと言う位置づけでperl5.10に取り組んでいます。 日本語のマッチングに関しては、「基本的にできない」という捉え方でよいでしょうか? perlに精通するのが目的ではなく、実用上のツールとしてどうか、ということで アドバイスをいただければ幸です。
>>595 Encodeとかencodingのドキュメントを読めばできるんじゃね?
>>594 > %{ }で囲えばよかった
Perl のリファレンスの部分を勉強したほうがいいと思う。
そうしたら $hash{'a'}、$hash{'a'}->[0] の正体と、それをどう扱ったらいいのか理解できる。
599 :
デフォルトの名無しさん :2008/02/05(火) 14:07:04
質問です。 JavaScriptからHTMLへ値を受け渡すときのように、 CGIからHTMLへ値を受け渡すことは可能なのでしょうか? CGIの変数の中身をHTMLのテキストボックス内で表示する方法はあるのでしょうか? アドバイスをいただけるとありがたいです。
>>600 Webプログラム板で聞け。
$value = "hogehoge";
print "<input type='text' value='$value'>";
>>601 さん
ありがとうございます!!
解決しました!!!!!
603 :
デフォルトの名無しさん :2008/02/13(水) 22:52:49
大変、初歩的な質問で申し訳ないのですが、教えてください。 今まであるサーバで使っていたCGIを新しいサーバに移設したいのです。 そこで、新しいサーバの指示通りに設定してみましたが、下記のようなエラーがでます。 何が原因なのでしょうか?・・・ : In string, @jcom now must be written as \@jcom at >form.pl line 27, near "/usr/sbin/sendmail -t -f s-hirono@jcom" : In string, @mfi now must be written as \@mfi at >form.pl line 437, near "@mfi" : form.pl had compilation errors.
ちゃんと書いてあるじゃん > In string, @jcom now must be written as \@jcom って。
605 :
デフォルトの名無しさん :2008/02/13(水) 23:14:17
すんません、素人なんで意味がわからないんですよ・・・
606 :
デフォルトの名無しさん :2008/02/13(水) 23:15:14
¥をどこかに足すって意味ですか???
ご丁寧にも自然言語でエラーメッセージだしてくれてるんだから、素人も玄人も関係ないだろ。
でも素人の頃は、俺もこんな感じだったな。 「分からない」っていう先入観があるんだよな。 分かってしまえば、「あー、本当にそのまんまじゃん・・」って気付くんだけど。
609 :
デフォルトの名無しさん :2008/02/14(木) 00:17:22
今朝のみのさん:その三角形のやつなんだっけ? 汚点気お姉さん:はい雲がこういう形に見えます 今朝のみのさん:いやその三角形のやつなんだっけ? 汚点気お姉さん:はい矢印ですね。風がこっちから吹いてきます 今朝のみのさん:いやその三角形のやつなんだっけ? 汚点気お姉さん:ああっ! 女神様っ 今朝のみのさん:いやその三角形のやつなんだっけ? 汚点気お姉さん:ああっ! 寒冷前線ですね。毎朝やってんだから分かれよ。
610 :
603 :2008/02/14(木) 01:23:04
すんません、\@jcom って感じでやってみましたが、やはりだめでした。 確かにそのままの文章になってる気はしますが、根本的なところがわからないのでわかりません。
611 :
603 :2008/02/14(木) 01:24:52
ちなみに、
>>603 で書いたのは、サーバに付いてるCGIチェッカーのエラーメッセージです。
実際にwebから送信してみると、下記のエラーがでます。
Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator,
[email protected] and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.
612 :
デフォルトの名無しさん :2008/02/14(木) 01:34:46
>「分からない」っていう先入観があるんだよな。 まさにそのとおり。よく読めば中学生でもわかるやさしい英語でかいてある。 > In string, @jcom now must be written as \@jcom at >form.pl line 27, near "/usr/sbin/sendmail -t -f s-hirono@jcom" 翻訳:27行目の @jcom は \@jcom って書かなきゃダメだよ〜ん 他の残りの行は宿題として取っておく。自分で解けるよね?
613 :
デフォルトの名無しさん :2008/02/14(木) 01:41:44
師曰く 「ルーク、フォースを使え」 コンピュータだから難しい。 perl なんて使ったことが無いからわからない。 そんな先入観を捨てて、中学1年生のあの頃の素直な気持ちに帰ってみろ。
お前らスレ違いなのに優しいな
それに対して
>>603 の丸投げ感は一体…
大体ソースコードも張らずにどうして欲しいんだ?
615 :
603 :2008/02/14(木) 22:33:34
返答ありがとうございます。
CGIチェッカーのエラーは解消されました。
ですが、本番のweb上ではやはり
>>611 のエラーがでます。
>>614 スレ違いですか?それは失礼。
他に適当なスレが見つからなかったものですから。。。
他に良いスレがあるようなら教えてください。
web上のエラーはweb制作板に言え
617 :
デフォルトの名無しさん :2008/02/14(木) 23:05:01
スレ違い厨は気にせんでもいいよ。
でもな、
>>611 は、書いてることを読め、としか言いようが無い。
英語が読めないんだったら、読める人に頼んで訳してもらうとか、何か自分で考えろや。
この先一生つきまとう問題だぞ。
618 :
603 :2008/02/15(金) 00:21:54
web制作に行っても適当なのがなさそうでした・・・ ソースはってもいいすか? >>611を読んでも、結局わからないのですが・・・ 管理者に聞けみたいな話ですよね?
スレ違いの懸念濃厚ですが… windows上で *.pl を実行する場合(一般的かどうかわかりませんが私の環境では)、 ウィンドウが開かず全画面で一瞬真っ黒になります。 これを避けるため、batに記述して起動しています。 しかし中には引数の受け渡しの関係からこれができない場合が生じました。 batを使わずにウィンドウ上で起動する方法があればご教示ください。
>>620 よくわからんけど、Perl.exeにPIFファイル設定すりゃなんとかなるんじゃね?
ファイル名のリストから数字の付いていないものをみつけ出し、それらのファイル名に数字の付いたものを出力しようとしました。 期待する出力は aa aa86.txt ww ww873.txt q q12.txt なのですが実際は aa ww q となります。どこが悪いのかご教示ください。 ソース: use utf8; @f = ("aa.txt","aa86.txt","fff73.txt","ww.txt","ww873.txt","q.txt","q12.txt","mm55.txt", "gg21.txt",); @nn = grep(/^\D+$/, @f); foreach $nn(@nn){ $nn =~ s/\.txt//; print "$nn\n"; @n = grep(/^$nn\d+$/, @f); print join("\n", @n); }
>>623 @n = grep(/^$nn\d+\.txt$/, @f);
625 :
デフォルトの名無しさん :2008/02/17(日) 03:58:30
@n = grep(/^$nn\d+$/, @f); ↓ @n = grep(/^$nn\d+\.txt$/, @f); じゃない?^ とか $ の意味がわかってて使ってるのかな?
626 :
623 :2008/02/17(日) 14:35:25
>>624 >>625 レス有難うございます。そんなポカだったか…、と思って元ソースでやってみると
問題は違っていました。
ここに書き込むためにいろいろ端折っているうちに余計なところまで削ったようです。
その所為で同じような出力になりそれを書き込んでしまった次第です。
そこで元ソースをそのまま書き込もうとしましたが、長すぎてできません。
627 :
623 :2008/02/17(日) 14:36:27
元ソースです。 use utf8; use Encode; $movepath = encode('sjis', "パソコン\\番号なし"); chdir "E:\\My Documents"; chdir $movepath; @files = glob("*.txt"); @nonumfiles = grep(/^\D+$/, @files); print join("\n",@nonumfiles),"\n-----------------------\n"; foreach $nonumfile(@nonumfiles){ $nonumfile =~ s/\.txt//; print $nonumfile, "\n=======================\n"; @numfiles = grep(/^$nonumfile\d+\.txt$/, @files); foreach(@numfiles){ print $_, "\n"; } print "\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n"; }
628 :
623 :2008/02/17(日) 14:37:33
で、該当ディレクトリには --------------------------------- "お助けパソコントラブル救急隊.txt", "お助けパソコントラブル救急隊886.txt", "お助けパソコントラブル救急隊887.txt", "お助けパソコントラブル救急隊888.txt", "なっとく!ワード773.txt", "なっとく!ワード774.txt", "なっとく!ワード775.txt", "なっとく!ウインドウズXP.txt", "なっとく!ウインドウズXP873.txt", "なっとく!ウインドウズXP874.txt", "なっとく!ウインドウズXP875.txt", "なっとく!ウインドウズXP876.txt", "なっとく!エクセル836.txt", "なっとく!エクセル837.txt", "なっとく!エクセル838.txt", "なっとく!エクセル839.txt", "なっとく!パソコン用語.txt", "なっとく!パソコン用語1265.txt", "なっとく!パソコン用語1266.txt", "なっとく!パソコン用語1267.txt", "なっとく!パソコン用語1268.txt", "WindowsXPの便利技と裏技855.txt", "WindowsXPの便利技と裏技856.txt", "WindowsXPの便利技と裏技857.txt", "WindowsXPの便利技と裏技858.txt", "グーグルの便利技と裏技212.txt", "グーグルの便利技と裏技213.txt", "グーグルの便利技と裏技214.txt",
629 :
623 :2008/02/17(日) 14:40:35
上のようなファイル群があり、 これをスクリプト内におけば問題は起きません。 ところが実際にディレクトリを読んで動かすと お助けパソコントラブル救急隊.txt なっとく!ウインドウズXP.txt なっとく!パソコン用語.txt ----------------------- お助けパソコントラブル救急隊 ======================= ~~~~~~~~~~~~~~~~~~~~~~~~~~ なっとく!ウインドウズXP ======================= なっとく!ウインドウズXP873.txt なっとく!ウインドウズXP874.txt なっとく!ウインドウズXP875.txt なっとく!ウインドウズXP876.txt ~~~~~~~~~~~~~~~~~~~~~~~~~~ なっとく!パソコン用語 ======================= ~~~~~~~~~~~~~~~~~~~~~~~~~~ となってしまいます。
630 :
623 :2008/02/17(日) 14:43:38
以上、長々と御見苦しい限りですが何とかなりませんでしょうか。 よろしくお願いいたします。
>>627 (´-`).oO(「 use utf8; 」してるわりに、ファイル名の文字コードはsjisなのはなんでだろう・・・。)
(´-`).oO(とりあえず、Linuxでファイル名もUTF-8で動かしたら動いたっぽいが・・・。)
632 :
デフォルトの名無しさん :2008/02/17(日) 22:21:32
>これをスクリプト内におけば問題は起きません。 >ところが実際にディレクトリを読んで動かすと ここがポイントだな。 perl スクリプトは utf8 で動いてる。 Windows は ShiftJIS で動いている。 文字コードを変換してやらないとダメね。 さぁ、perl の utf8 地獄でもがき苦しみましょう。
633 :
デフォルトの名無しさん :2008/02/23(土) 19:56:15
アクセスログの勉強しててわからないとこがあります。 配列の一要素にオートインクリメントがついてて ++$freq[$hour]; と書いてあるのですが、実際どこの部分に1がたされてるんですか aとbの解釈どっちが正しい? a、$hour に1足されてループする →$freq[0]、$freq[1]、$freq[3]、$freq[4]、$freq[5] みたいのができる b、$freq[$hour] という値自体に1足されてループする 一応、全体の書いとくとこんな感じです。 ちなみに$freq[ ]という配列はこのwhile文できゅうに出てきてます while($ln = <FILE>) { ($hour , $min , $host , $refer , $agent) = split( /\t/ , $ln); ++$freq[$hour]; }
634 :
633 :2008/02/23(土) 20:06:07
すません 自己解決しました
636 :
635 :2008/02/23(土) 20:09:48
おそかった
637 :
正志 :2008/02/23(土) 21:54:58
CSVファイルで行列を入れ替えてファイルを作るプログラムない?
#!/usr/bin/perl use strict; use warnings; use Text::CSV_XS; use List::MoreUtils qw(each_arrayref); my $csv = Text::CSV_XS->new({binary=>1}); my @list; while (<>) { next unless $csv->parse($_); push @list, [$csv->fields]; } my $ea = each_arrayref(@list); while (my @l = $ea->()) { $csv->combine(@l); print $csv->string . "\n"; }
639 :
正志 :2008/02/23(土) 23:20:56
>>638 なんかすごいものをありがとうございます。
Windowsの場合はどうしたらいいでしょう
OS関係ないだろ
Windows 環境は大変だ。普通の奴は C コンパイラも nmake も持ってるわけがないし
よしんば持っていても、perl Makefile.PL が吐き出す Makefile は不都合が多すぎる。
(MinGW 派はいつも疎外感にさいなまれ、泣いている)
その上 XP 以降だと、こんな状況らしい:
ttp://harapeko.asablo.jp/blog/2006/12/21/1041020 幾多の困難を乗り越えて、ようやく Windows でも新しいモジュールを試すことが出来るのだ! ( 完 )
# でも Text::CSV_XS は新しくはないだろって?
# いいや、少なくとも去年の 6 月以前の ActivePerl には入っていないのだ orz
642 :
正志 :2008/02/24(日) 21:55:15
困ったなあ。 なあ640。
だったらText::CSV_PPとかでよくね?
644 :
デフォルトの名無しさん :2008/03/15(土) 01:10:04
@Dataという配列にハッシュを入れてキーはA、Bがあります、そのおのおのの値をFA1、FB1する @Dataという配列は100個のハッシュを持ってるとします。 $Data[1]{"A"} = FA1 $Data[1]{"B"} = FB1 ... $Data[100]{"A"} = FA100 $Data[100]{"B"} = FB100 FB1〜FB100でソートし標準出力に出力したいのですが、どうすればいいか教えて下さい
print sort {$a->{'A'} <=> $b->{'B'}} @Data;
646 :
デフォルトの名無しさん :2008/03/15(土) 17:34:40
inlineC使おうと思ってるんだけど LinuxではinlineCが動作するんだけど activeperlだとVCでコンパイルしてるとあったから VCのコンパイラ持ってきてコンパイルしてるんだけど inlineがmakeでエラー吐く・・・ コンパイラがactiveperlと非同期のせいだと思うんだけど どうすればいいのかな???
647 :
デフォルトの名無しさん :2008/03/15(土) 17:37:29
ちなみにVCはexpressバージョンです。
648 :
デフォルトの名無しさん :2008/03/18(火) 02:41:07
Pod::Textで日本語(utf8)のテキストを出力しているんだけど、 width指定が真っ当に動いてくれないのな。 まぁ1文字の幅がASCII文字と違うから当然なんだけども。 なにか簡単な解決策とかある?
649 :
648 :2008/03/18(火) 05:10:25
とりあえずやっつけてみた。 Pod/Text.pmをローカルに持ってきてuse lib。以下のように修正。 もっといい方法があれば教えてエロい人。 sub wrap { my $self = shift; local $_ = shift; my $output = ''; my $spaces = ' ' x $$self{MARGIN}; my $width = $$self{width} - $$self{MARGIN}; my @chars = grep(/[^\n]/, split(//)); my $len = 0; my $tmp = ''; while (@chars) { my $c = shift(@chars); $tmp .= $c; if ($c gt chr(0xff)) { $len += 2; } else { $len++; } if ($len+1 > $width) { if ($chars[0] =~ /[。、]/) { $tmp .= shift(@chars); } $output .= $spaces . $tmp . "\n"; $tmp = ''; $len = 0; } } if ($tmp) { $output .= $spaces . $tmp; } $output =~ s/\s+$/\n\n/; $output; }
ちゃんと検証してないので的外れかもしれないけど。 ・ファイルを直接編集せずに、Pod::Text::wrap(でいいのか?未確認)を上書きしたほうが楽かと ・「0xffより上」は不正確(不正確でもいいならいいけど) ・Jcodeのjfold()を使うのも手かも(あれも正確じゃないけど) そういや昔、ちゃんと禁則処理して桁折りするモジュール探したけどなかったんだよな……。 いまもないのかな?
651 :
648 :2008/03/18(火) 22:56:30
>>650 「0xffより上」に関しては不正確でも構わないのでこのままでいきます。
いわゆる半角カナとか使わなければ問題にはならなさそうですし。
>・ファイルを直接編集せずに、Pod::Text::wrap(でいいのか?未確認)を上書きしたほうが楽かと
やってみました。
これは楽でいいですね。ありがd!!
sub _Pod_Text_wrap { ... }
undef *Pod::Text::wrap;
*Pod::Text::wrap = \&_Pod_Text_wrap;
関数のオーバーライドは初めてやったのですけど、
こんな感じでいいのかな? いちおう動いてますが。
それでいいんじゃない? 僕は *Pod::Text::wrap = sub { ... }; とかやっちゃいますが。 元のを残すなら上書きする前に my $org_wrap = Pod::Text->can('wrap'); とかすれば良かった気がする。
653 :
デフォルトの名無しさん :2008/03/24(月) 00:29:20
こんにちは、そしてみなさんはじめまして。 macOS10.3にperlの5.10をいれて動かしたいんですが インストールしたはいいもののその後どうしたらよひか わかりません。どうか詳しい方おしえてください。
ターミナルを立ち上げる
655 :
653 :2008/03/24(月) 14:35:27
ターミナルを立ち上げました!
ターミナルに、 perl -e 'print "Hello Worldn"' と打ち込んでリターン。 これで君も今日からPerlプログラマー
657 :
653 :2008/03/24(月) 16:16:39
ターミナルに perl -e 'print "Hello Worldn" と打ち込んでPerlプログラマーになりました! しかし、perl -V と打ち込んでリターンしても バージョンは5.8のままです…。
そうか…。
>>657 新しいperlがある場所をターミナルに教えるための設定変更が必要になる。
これはperlとは関係ないから、Mac板のプログラム関係のスレで聞いた方がいいと思う。
そのとき、どうやってperlをインストールしたかも書いた方がいいよ。
$ uname -a
Darwin **** 9.2.2 Darwin Kernel Version 9.2.2: Tue Mar 4 21:23:43 PST 2008; root:xnu-1228.4.31~1/RELEASE_PPC Power Macintosh
$ whereis perl
/usr/bin/perl
$ perl -v
This is perl, v5.8.8 built for darwin-thread-multi-2level
(with 1 registered patch, see perl -V for more detail)
Copyright 1987-2006, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl". If you have access to the
Internet, point your browser at
http://www.perl.org/, the Perl Home Page.
何かの参考になれば。。。
661 :
653 :2008/03/24(月) 21:28:04
なんとかできました。5.8から5.10になりました。 656さん、659さん。ありがとございます! ちなみにperlのバージョンは5.8と5.10ってどう違うんですか? あと5.10が使えるようになったら5.8は捨ててしまってもよいのですか。
>>660 スレ違いだって言われてんだから大人しく引っ込んでろっての。
あっちにゃ「macをUNIXとして使う」スレだの「terminal初心者」スレ
だのあんだろーーがよお。
bash デフォだから
echo 'PATH=/usr/local/bin/:$PATH' >> ~/.bashrc
source ~/.bashrc
perl -v
してみろっての。
お前さんが、/usr/local/bin/ 以外に perl 5.10 入れたんだったら知らん。
つーか何で5.10を入れたんだ?5.86で十分だろ?変なクセつけるだけだぜ?
っての。
あ、遅かった。遅れた煽りほどかっこわるいものはない。orz...
>>661 基本的に流儀として/usr/binの中とかからは捨てないよ。
/usr/binの中のものをupdateする時はupdate相手のbackupを取って置くものだし。
664 :
653 :2008/03/24(月) 22:10:16
了解しました。とっときます。
$file='hoge'; ・・・ foreach(sort(keys(%hoge))){ ・・・ } のように %hogeにあたる部分を $file を用いて参照する方法があればご教示ください。
eval
chdirで移動した後、元のディレクトリに戻る方法がわかりません。 ご教示ください。
ごめんなさい。668です。直前のevalの{ }のあとに ; がないために できなかっただけのようです。 取り消します。
@zcap = qw(aa po); $zra{'def'}='abc'; foreach( @zcap){ eval{ print "(%z$_){'def'}\n"; }; } を修正して、 abc と出力させる方法を教えてください。
スイマセン $zpo{'def'}='abc'; でした。
@zcap = qw(aa po); $zpo{'def'}='abc'; foreach( @zcap){ eval('print "$z' . $_ . '{'def'}n"' ); }
>>671 イタタタタタタタタタタタタタタタタタタタタタタ
@cap = qw(aa po); eval{ foreach(@cap){ push(@acap, '\@a$_'); } }; foreach (@acap){ $$_[0] = 6; } print $aaa[0], $apo[0]; で 66 を出力したいのですが修正をお願いします。
またおまえか
677 :
デフォルトの名無しさん :2008/04/12(土) 01:01:39
cgiに送ったデーターはどこに格納されるんですか?
679 :
デフォルトの名無しさん :2008/04/12(土) 01:41:38
おちんちんにperlを埋め込みたいんですが、腕のいいクリニックをご存知ありませんか?
>>676 また、"おまえ"です。
よろしくお取り計らいください。
>>675 シンボリックリンク相当の処理をevalで無理矢理やりたいのですね。
しかも全部グローバル変数で。
そんなことをしなければならない理由がわからない…いまやリファレンスを使えば
同等のことができますよ。
@aaaと@apoを、
my %array = ( aaa => [], apo => []);
として、
my @acap;
foreach (keys %array){
push(@acap, $array{$_});
}
foreach (@acap){
$_->[0] = 6;
}
print $array{aaa}[0], $array{apo}[0];
ではだめなの?
もっともこのコード自体なにしたいかわからんけど。
>>681 ご指導有難うございます。
理解できない部分が大半なので、じっくり検討します。
なにせ古い解説書しか持たないもので…。
新しいのが欲しいが高いもので。
>>681 「シンボリックリンク」というのがまず分からなかったのですが、UNIXの
概念で、エイリアスかショートカットのようなものですね。
グローバルにしているのはローカルである必要がないことと、my の理解ができていない
ためかサブルーチンにいちいち argumentを渡すのが面倒なことが理由です。
aaa=> [] の記法は知らなくて、無名の配列のアドレスを aaa というポインタで参照できる
というふうに理解しました。
eval を使ったのは次の理由です。
@cap = qw(aa po); は実は aa とpo の間に50ほどの2文字があり、このセットをもう一組
必要とします。それらの2文字で参照できる配列群の配列を設定しようとしました。
静的な配列なので、あらかじめポインタの配列を準備すればよいのでわざわざ push で
押し込む必要はないのですが、2セットを楽に準備できればと思い eval を使いました。
その結果他の手段の知識がないために、あのような妙で馬鹿馬鹿しいコードとなった
わけです。
教えてくださいましたコードを必要な部分だけにしたところ、
%acap = ( aa => [], po => []);
foreach (keys %acap){
$acap{$_}[0] = 6;
}
$acap{po}[12]=777;
print $acap{aa}[0], $acap{po}[0], $acap{po}[12];
となりまして、期待通り動作しました。最後の2行は配列が確かにできていることの
検証のつもりです。
で、%acap = ( aa => [], po => []) という記法が使えると、
%tcap = ( aa => [], po => []) としてコピー&ペーストすれば簡単に当初の目的が
達成できることになり、ややこしい eval は必要なくなりました。
皆様にはお目ざわりだったようですが、今回はこれで恙無く解決しました。
有難うございました。
684 :
681 :2008/04/13(日) 02:03:04
>>683 シンボリックリファレンスの間違いですorz
50個も要素があるなら、
%acap = ( aa => [], po => []);
は
%acap = map { $_=> [] } qw(aa po);
と書いた方が視認性が上がります。
# もっともこの初期化はなくても動きますが
>>684 またまた便利そうなものを有難うございます。
これから勉強してみます。
はじめまして。 昨日からPerlを勉強し始めました。 今変数を勉強しています。そこで、 $a=2; $b=3; $a=$b; という、変数の代入を見て不思議に思ったのですが、 なぜ、せっかく変数aで2を指定してあげたのに、 後からわざわざ変数bに代入などするのでしょうか。 この記述は、主にどういちた場合に使用されるのですか? どうかご回答よろしくお願いします。
ただの書き方の例だろ
まだ「へんすう」の説明段階なんだから、こんなこともできますよぐらいの 意図で書かれてるんでしょ。 $a=2; $b=3; # $a の初期値 2 を使いつつ $b に対して血で血を争うような壮絶な演算処理 $a=$b; # 再び $b は地獄のような処理をくぐり抜けて $a=$a+$b; なんてことがあってもいいじゃない。 参考にしてる本が変数名に $a と $b 使ってるのなら、そっちが気になる。
691 :
688 :2008/04/16(水) 19:41:12
>>689 ー690
なるほど、わかりました!
どうもありがとうございます。
参考にしている本は「Perlの絵本」です。
初心者にもわかりやすいと聞いたので。
絵本は・・・
ダメなん?
694 :
690 :2008/04/16(水) 22:45:31
スレ見たら「血で血を争う」とか書いてる人がいたので指摘しようかと思ったら 自分だったorz 絵本は初心者さんに人気みたいだけど、さて。
俺も絵本使ってる。 よくないなら他の書籍買うから、参考にダメな理由を教えてくれ。
$aと$bは特殊な変数なんで使わないほうがいいよ。
絵本は確認取れんので $a, $b の所だけ注意喚起させてくれ。
(絵本に例として $a, $b が使用されていた場合)
「$a, $b は共に定義済みの変数。」
sort { $a <=> $b } @hoge ;
なんかの時に使う。なので特に必要が無い限りは sort 以外で使わない方が良い。
熟練者が分った上で使う分には文句は言わないし、2ch で例として出して来ても
あまり気にしないが、これを初心者向けに安易に使用するのは疑問符が付く。
ただ、もっと大きな地雷を幾つも抱えてる初心者本はあるので、この一点のみで、
読んでもいない「絵本」を評価は出来ない。スマン。
参考
1. perl の定義済み変数
perldoc の perlvar ( 但し、5.8 以降。バージョンに注意。)
ググるかコマンドラインで perldoc perlvar
2. 熟練者の $a,$b 使用例
ttp://search.cpan.org/src/GBARR/Scalar-List-Utils-1.19/lib/List/Util.pm ふんだんに使われている。perl 標準添付モジュール。
3. 大きな地雷の例
「一週間でマスターするPerl for Macintosh」
OSX が一般化しようとしている時代(2002/07)に、classic 環境の
MacPerl にて perl を解説。もちろん、OSX へのインストール等、事細か。
OS9 の人も相手にしたかった事情があるのかもしらんが…。
っと長々と書いて投げようと思ったら、696氏が既に指摘してた。ま、いいか。
698 :
デフォルトの名無しさん :2008/04/20(日) 20:43:36
perlでクライアントの2chブラウザ作ったけど見たい人いますか? 4時間ほどで作りました
板違い
配列へのアクセス確認の目的で、 @acap = map { $_=> [] } qw(aa po); foreach (@acap){ for($i=0;$i<7;$i++){ $$_[$i] = $i+11; } } foreach $acap(@acap){ $j++; foreach $cap($acap){ print '$j=', "$j\t$cap\n"; print join("\t",@$cap), "\n"; } print "\n"; } としました。 目論見では aa, po の2組だけが出力される筈でしたが 余計な(?)もう一組が出力され、この理由がわかりません。 ご教示いただければ幸です。
>>702 有難うございます、そういう手がありましたか。
>>700 > 余計な(?)もう一組が出力され、この理由がわかりません。
それは、あなたがそうなるようにコードを書いているからなのですが…。
普段からuse strictをしてコードを書くようにすると幸せになれます。
で、変なところは、1行目で@acapで受けているところ、それから、
2回目のforeachの内側のforeach $cap($acap){ の$acapです。
何をしているのか、1ステップずつ意味を確認して組んでみてください。
>>704 丁寧なご指導有難うございます。
1行目が致命的であったことがわかりました。
map の意味がわかっていないことに加えて、
ハッシュのレファレンス表現になじみがないことが
絡まりあって=>がmapに必要なものだと思ったことが
原因だと思います。
2番目のご指摘がまだ理解できません。もうすこし検討します。
sed からの亡命者である所為かuse strictを適用すると
コンパイルエラーの嵐で、使い物になりません。
折角のご助言ですが当分はこれなしでやってみようと思います。
修正分:
@acap = map { \@$_} qw(aa po);
foreach (@acap){
for($i=0;$i<7;$i++){
$$_[$i] = $i+11;
}
}
foreach $acap(@acap){
$j++;
foreach $cap($acap){
print '$j=', "$j\t$cap\n";
print join("\t",@$cap), "\n";
}
print "\n";
}
>>705 # 厳しいようですが、use strictを指定して使い物にならないコードは、
# すでに使い物になっていない気が…。そのようなコードはいざ動かない
# ときどこに問題があるのかを探すのが猛烈に大変ですよ。
@acap = map { \@$_} qw(aa po);
はなにをしたくてこのようなことをしているのですか? これは、結局
@acap = ([], []);
としているのと同じです。
それと、後半でfor文が2重になっていますが、内側の foreach $cap($acap){ は
ループにする意味がありません。要素が$acap一つだけなら、$cap = $acapと同じですから、
foreach $acap(@acap){
$j++;
print '$j=', "$j\t$acap\n";
print join("\t",@$acap), "\n";
print "\n";
}
で済みます。
まずは、何をしたいかを日本語で整理してみてはいかがですか。
日本語で書いて伝わらなければ、コードを書くことはできません。
707 :
デフォルトの名無しさん :2008/04/21(月) 16:51:51
ようするに、デバッグしてないって事だな。
708 :
サイタマン ◆mYN3wsz7vE :2008/04/21(月) 17:24:09
読みにくいコードがちょっとね。 何やってるか分からないコード各習慣付けるのは良くないですよ。
>>707 違う。この質問者は2chをデバッガと思ってる。
だから次には
「何故か出力が「$j=1 ARRAY(0x800ea0)」みたくなるのですが」
って質問が来る。
>>708 サイタマンもようやくプログラム板に常駐するようになったか。
自信がついたのかな?w
Fedoraを使っていると、モジュールインストールの方法には cpam、cpanp、yumの3種が考えられますが、 これらを混在させて使った(同じシステムで複数の方法を使った)ときに 起こりうる弊害にはどんなものがあるでしょうか?
712 :
デフォルトの名無しさん :2008/04/25(金) 21:33:26
Sfido = new Camel "Amelia"; この構文&newという動詞を起動するらしいのですが、構文に&をつける 必要はないのでしょうか? Sfido = &new Camel "Amelia";というふうに
>>712 PerlのOOP記法では&を付けなくてOK
714 :
デフォルトの名無しさん :2008/04/25(金) 21:43:20
>>713 つけてもつけなくてもOKってことですか?
715 :
デフォルトの名無しさん :2008/04/25(金) 21:47:43
perl初心者でやる気あるんだけどラクダ本難しすぎて 3日かかって16ページしか進まない、俺むいてないのか・・w
>>714 付けちゃいけない。
というか今まで付けたことなんてなかったから試してみたらエラーになった。
書き方覚えたら実験してみるといいよ
>>715 ラクダ本は初心者には難しいからそれくらい普通
実際の例見ながら勉強した方がいいと思う
718 :
デフォルトの名無しさん :2008/04/25(金) 22:00:24
ありがとう、でもなんとか1年くらいでマスターしたい と焦っておる
何か事情があるならともかく、そうでなければ焦らずに ゆっくりじっくりやるほうがいいよ。 何を以って「マスターした」になるのかはわかんないけど リャマ本を先に経由したほうがラクダ本が読みやすくなるんじゃないかな?
721 :
デフォルトの名無しさん :2008/04/25(金) 22:23:05
>>720 無理して5000円もだして買ったのに、どっかにラクダ本
がいいって書いてあったから、明日りゃまかってくるぜ
>>718 1年もかかるのなら向いてないってことだ。
723 :
デフォルトの名無しさん :2008/04/25(金) 22:54:33
じゃあ半年
ラクダ本は、面白くて面白くて読むのが止まらない本だと思うのだが。
>>724 はむいている人。
むいていない人もがんばって!
結構勉強して、Perlの本質が見えてくると
>>724 みたいになれるんじゃないか?
俺はPerl初めてから4年くらい経ってラクダ本のおもしろさに気づいたクチなんだが。
727 :
デフォルトの名無しさん :2008/04/26(土) 19:07:59
先日むいてないのかなぁっていったもんだけど 別にラクダ本楽しくないとはいってない 専門用語がおおくてわかりにくいっていっただけ ここはひねくれたプログラマーが少数だけどいるみたいだな まぁプログラムはひねくれてたほうがいいのかな 解読しやすいしな、perl使える人らしいけど実際すごいのは perl作った人だから勘違いすんなよwwwwwww
perlはひねくれたプログラマ向けの言語。 文法からしてひねくれてる。
729 :
デフォルトの名無しさん :2008/04/26(土) 19:25:43
昔さ、マンハッタンのエリートのデスクにはPerlのパッケージが必ずあった っていう話があって、エリートになるにはオープンソースを使いこなさなくては ならないって言われてた。 よくよく考えたら、本当にあったのはエクセルのパッケージなんだよね。 だからどうしたって言われればそれまでだけど、ちょっと考えさせられない?
perlをパッケージで買ってデスクに飾るってのも変な趣味だよね。
731 :
デフォルトの名無しさん :2008/04/26(土) 21:14:09
>>728 おまえperlなんてなんもしらないのに、なんでこのスレにいんの?
>>729 > 昔さ、マンハッタンのエリートのデスクにはPerlのパッケージが必ずあった
> っていう話があって、
ね〜よ
>>730 それらしいパッケージを作るところからはじめないと。
734 :
デフォルトの名無しさん :2008/04/27(日) 05:58:26
> 専門用語がおおくてわかりにくいっていっただけ とか言っている不誠実な「向いていない人」がいますが、ラクダ本は専門用語は 決して多くないし、わかりにくくもありません。知的刺激に満ちた面白い本です。 初心者の人は、「向いていない人」の自己正当化のゴマカシに騙されて 敬遠しちゃったりしないで、ぜひ読んでみてくださいね。
735 :
デフォルトの名無しさん :2008/04/27(日) 06:56:18
>>734 みたいな嘘書いて勧めちゃう子ってどこの国にもいるんだよね。
>>734 そういうこと書くと、頭悪すぎてラクダ本に挫折した連中が荒しに来る。
737 :
デフォルトの名無しさん :2008/04/27(日) 09:57:27
>>431 #!/usr/bin/perl
$camels='123';
print $camels+1,"\n";
これ1行目なんでシングルクォートなん?
2行目に続くから?要するに2行目が結果だから?
738 :
デフォルトの名無しさん :2008/04/27(日) 09:59:38
printのあとにダブルクォートがないのはcamelsが数値として 認識されているからだよね?
>>737 また入門書の例か?
文字列として定義した変数が、+演算子で使われると数値に置き換えられる、
って例じゃないの?
740 :
デフォルトの名無しさん :2008/04/27(日) 10:54:27
>>739 なんで文字列として定義ってわかったん?おまえ天才じゃね?
これ別に$camels=123;でいいんでないの?なぜシングルで囲む?
日本語でお願い
742 :
デフォルトの名無しさん :2008/04/27(日) 11:05:50
>>740 すいません、$camelsはデフォが文字列?
だから$camels=123;ここまでの構文ならこの表示でいいのだけど
2行目のprint $camels+1,"\n"; の最後の構文かんでるから
$camels='123';ってこと?シングルは変数展開なしですもんね?
743 :
739 :2008/04/27(日) 11:13:19
>>740 > これ別に$camels=123;でいいんでないの?なぜシングルで囲む?
普通はそれでいいよ。
しかし、この質問のネタが何かの入門書じゃないの?と俺のエスパー能力が反応したんだよ。
入門書だから、そういう非現実だけどわかりやすい例を書いてあるんじゃないの?と。
744 :
デフォルトの名無しさん :2008/04/27(日) 11:17:28
そのケースは良いんだが、 $foo = 0123 ; と $foo = '0123' ; とじゃ print $foo +1; した時に答えが変わる事くらいは覚えとこう。
その例を出す前に print 0123; ぐらい見ておいてもらわないと、いろいろ混乱するんじゃないかな。 まだ10進数しか出て来てないだろうし。
747 :
デフォルトの名無しさん :2008/04/28(月) 02:36:11
アート引越しセンター って表示された。
楽をしようとすると新たなコストが発生するものだというお告げだな。
749 :
デフォルトの名無しさん :2008/04/29(火) 12:38:04
perl自動で変数設定してくれるのあって 使えるようになったんだが、これテキストエディタに書き込んで perlのなかのbinにテキスト保存してdosで呼んで機能させるんだよね?
750 :
デフォルトの名無しさん :2008/04/29(火) 12:50:31
できたソーリー
751 :
デフォルトの名無しさん :2008/04/30(水) 00:23:05
@unko = split /<table[^>]*>/,$html; ってやると、<tableタグが消えちゃいます。 消えない方法はありますか? あとから join で元にもどせないと困るんです。
@unko = split /(?=<table[^>]*>)/,$html;
753 :
デフォルトの名無しさん :2008/04/30(水) 21:42:16
>>752 ありがとう。30分かかって、やっと理屈がわかりました。
windowsが問題なく処理しているsjisの扱いをperlも見習って欲しい。
基本的には問題ないと思うけど、どの辺に問題があると思ってるの? #ファイル周りがダメなのは知ってるけど、他にもある?
PerlはUNIX産まれだからな あんなダメOSを見習う必要は無い EUC、及び今後はUTF8だけ使えれば充分
757 :
デフォルトの名無しさん :2008/05/13(火) 12:52:48
UNICODE対応してないOSは、いずれ廃れるな。 UTF8で誤魔化そうとしても、ほんのちょっとの時間稼ぎにしかならない。
>>757 UNICODE対応してるOSって、どんな状態のOSの事だ?
UTF-32ベースで動いてるOSの事か?
ってか藻前UTF-8、UTF-16、UTF-32の違い分かってないだろ?
759 :
デフォルトの名無しさん :2008/05/13(火) 19:40:54
>>758 あなた、もしかして
20世紀からタイムトラベルしてきたんですか?
Perl6::Say がなんか変です package Klass; sub new { bless {} } sub foo { 1 } package main; # use feature qw/say/; # これだと大丈夫 use Perl6::Say; # こうしたときに print Klass->new->foo, "¥n"; # うごく say STDOUT Klass->new->foo; # うごく $k = Klass->new; say $k->foo; # うごく # なんかこれだけ # Can't locate object method "say" via package "Klass" at ... # で死ぬ say Klass->new->foo; 別にもう Perl6::Say なんて使わなくてもいいのは知ってるけどなんか気持ち悪いです Perl6/Say.pm ものぞいてみましたがよくわかりません なにこれー?
>>760 ・Klass->new->foo;
・new Klass->foo;
これが等価なように、
・say Klass->new->foo;
・(Klass->say)->new->foo;
これも等価。
>>761 d
>・say Klass->new->foo;
>・(Klass->say)->new->foo;
>これも等価。
うはwwwww
Perl こえーwww
キーワードで検索しにくいので教えてください 以下の2つはどういった意味なのでしょうか [@array] @{$array[1]}
@array展開して無名配列リファレンスを作ってる? $array[1]におそらく配列リファレンスがはいっていてデリファレンスしてる。
ありがとうございます! 「無名リファレンス」←このキーワード検索で理解できました
コンパクトかつ適切なアドバイスありがとう。 こういう文法、PERLってマルチパラダイムだよなーって感じます。
769 :
デフォルトの名無しさん :2008/06/15(日) 01:19:00
$ perldoc perlcheat すると DON'T ってとこに > DON’T > "$foo" > $$variable_name > ‘$userinput‘ > /$userinput/ ってあるんですが、最後を除いて意味がよくわかりません(3番目はシェルコマンドで実行するなってこと?) 特に1番目と2番目は何で代替しろってことなんでしょう?
"$foo" # 変数展開されるから気をつけろ $$variable_name # シンボリックリファレンス氏ね `$userinput` # 汚い文字列をシェルに渡すな /$userinput/ # 汚い文字列を正規表現に突っ込むな
>>771 use warning;
use strict;
773 :
Perl中級者になりたい :2008/07/23(水) 15:49:05
ロゴがかっこいいとおもいます(汁
x print "Content-type: text/html\n"; o print $cgi->header();
x my %http_code = ...;
o use
HTTP::Status qw/status_message/;
x 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)'
o 'LinkHACKS (+
http://w7.oroti.com/~webhacks/ )'
x $browser->get(...);
o $browser->head(...);
>>778 $resp->status_lineで取れるから
>my %http_code = ...;
これはいらないな
780 :
Perl中級者になりたい :2008/07/23(水) 18:22:40
>>775 ahoの嵐・・・orz
受け取ったデータのチェックが必要ですね。。頑張って修正します。
>>776 webprog板逝ってきます。
>>777-779 / \
/ ─ ─\
/ (●) (●) \
| (__人__) | )) なるほど
/ ∩ノ ⊃ /
( \ / _ノ | |
.\ “ /__| |
|\ /___ /|
| ノ
ヽ y /
\ / /
/ /
(___)_)
オトナの事情
>>781 現行だと$coderef->() だろ?
. の方がバイト数がかせげる & '->' と言う定義をせずに済む。
何しろ > は => だの <=> だの他にも大活躍だから、、、
>>781 名前空間とパーザの都合。……Rubyの場合は。
Perlは何故なんだろうねぇ。変数を示すプリフィクスが付いてるんだから問題なさそうな気がするんだが。括弧省略との相性が悪いのかな?
$foo.()と$foo()は同じ意味のはず。 例えば、&はP5と違って関数をオブジェクト化したものを返すけど、 これを呼ぶときも、&bar.()と&bar()の両方で書ける。
787 :
781 :2008/08/12(火) 09:24:25
>>787 他にも++なんかの接尾演算子でも、$foo.++; と $foo++; の両方で書ける。
これは演算子がオブジェクトのメンバだっていうイメージなんだろうね。
789 :
デフォルトの名無しさん :2008/08/12(火) 20:44:56
Perl勉強中で 変数Aにオブジェクトが入ってて オブジェクトに$Cの値を入れようとしてるんですが 下記の1,2の違いについて調べても分からなくて 教えてくださるかたいませんか?_?ヒントだけでもいいので;w; 1: $A->B($C); 2: $A->{B} = $C;
>>789 「オブジェクトに$Cの値を入れ」るが意味不明。
もう少しちゃんとした言葉を使って説明してくれ。
1は PackageOfA::B($A, $C) とおなじ、
2は ${$A}{"B"} = $C とおなじ。
1のBはメソッドでCは引数 2のBはハッシュのキーでCは値
792 :
デフォルトの名無しさん :2008/08/30(土) 01:16:38
あいかわらず、日本語マッチングは面倒ですか? Emeditorの正規表現の方がよくね?
日本語マッチングって何?
794 :
デフォルトの名無しさん :2008/08/30(土) 01:30:05
まだつかえないんだ・・・
だから日本語マッチングって何だよ。
796 :
デフォルトの名無しさん :2008/08/30(土) 01:39:45
まだつかえないんだ・・・
^^;;;;;;
まぁどの言語でもそうだが、バカには使えないわな。
20世紀からタイムスリップしてきたひとか
800 :
デフォルトの名無しさん :2008/08/30(土) 08:28:11
>>799 もしかして、20世紀から生きてる人ですか?
この板も、とうとう小学生が跋扈するようになったか。
最初のプログラミング言語がPerlって、 スパゲッティー作りになることを義務づけられるぞ。
最近の小学生は制御構造なんて使いこなせないから
CASE文満載でなければおk
最初に入った言語がCOBOLだった俺からいわせれば、perlなんて可愛いもの。
>800 は8歳だったのか。 算数の勉強頑張れよ。
>>1 の日付見て吹いた
2008/08/13の勢いは異常だな
808 :
デフォルトの名無しさん :2008/10/26(日) 12:34:29
あげ
809 :
デフォルトの名無しさん :2008/11/11(火) 02:41:57
810 :
デフォルトの名無しさん :2008/11/12(水) 02:48:46
>809 sjisがベタで使われてるとか、htmlのタグの記述に統一性が無いとかで 極力係わり合いになりたくないコードだなぁ タイトル増やすのも面倒だ こいつを書き直せって課題なら、嬉々としてやるところだw
webprog池よ
>>809 ガッコの課題で、そんな例題を出すのかぁ・・・・
そりゃ問題だ!
perlでメールの添付ファイルの処理をしようとして、
ttp://homepage3.nifty.com/hippo2000/perltips/rcvmail.htm を参考にプログラムを書こうと思っているのですが、
上記ページのWordDecoderを使ったサンプルプログラムを実行すると、
保存されたファイル名がURLエンコードされている状態になってしまいその原因が分かりません。
実はURLエンコードされている方が扱いやすくてうれしいのですが、
原因が分からないのが気持ち悪くて…。
どなたか教えていただけないでしょうか。
動作環境はFreeBSD6.0で、Jcode, MIME-Toolsはportsでインストールしました。
よろしくお願いいたします。
815 :
814 :2008/12/19(金) 05:30:45
すみません、別のスレ(Perlについての質問箱)で聞いてこようと思います。 失礼しました。
perlで書かれたプログラムをダウンロードしたのですが、 使い方として、 ・本体(exxeed.pl)は編集の必要がありません。 ・cpiファイルにスクリプトを追記して、動作を指定します。 ・起動方法 コンソールから > perl exxeed.pl hogehoge.cpi とだけ書かれているのですが、これって、 サーバー内のCronなどからコマンドで実行するって事ですか?
シェルから実行すればいいだけだろ
>コンソールから >コンソールから >コンソールから >コンソールから >コンソールから >コンソールから >コンソールから >コンソールから >コンソールから >コンソールから >コンソールから
コンソールから シェルから この意味がぐぐってもイマイチ理解できてないです。 要するに、サーバーにアップして使用するのではなく、 コマンドプロンプトとかから実行するものなのですか?
>>819 そのperlスクリプトが提供する機能がわからんのに答えられるわけがなかろう。
定期的に動かすものならcronに登録するし、
CGIならWebサーバのCGIディレクトリに設置するし、
コマンドラインで実行することになってるプログラムならコマンドプロンプトやターミナルエミュレータから実行するし、
GUIアプリならエクスプローラやファイラーからダブルクリックする。
>>819 サーバで動かしたいなら、サーバにアップロードしてから
リモートシェルの類で実行すればいい。
なんにしてもperlの使い方の質問じゃないから、
適当なスレを探してくれ。
・起動方法 コンソールから > perl exxeed.pl hogehoge.cpi これ読んでわからんのなら、パソコンの使い方を勉強しろ。 そうとしか言いようが無い。 駅前のアビバに通った方がいいぞ。
823 :
816 :2009/01/13(火) 04:20:00
皆さん有難うございました。 まだよくわからないので、他スレで聞いて見ます。
824 :
A :2009/01/13(火) 16:19:41
それは、コマンドプロンプトから起動(実行)するもの。
UNIX/Linuxの場合、シェルから起動(実行)する、とも言う。
>>816 何がしたいのか書いてない。
<form method="POST" action="exxeed.pl"> ただこれは無理だと思う。
コンソールっつーとサーバセンターまで行ってキーボードぶっ挿して、ってイメージ
↑ Windows しか触ったこと無いひと。
828 :
デフォルトの名無しさん :2009/01/16(金) 23:18:15
ウェブプログラミングで引っかかってる問題だが、本質はEncode.pmなんで、こっちで聞こうと思いまつ。 utf-8の"〜"を Encode::from_to で EUC-JPに変換すると、?に文字化けするようです。 -------------------------------------サンプル #!/usr/bin/perl -w use strict; use Encode; my $str ="〜"; Encode::from_to($str, "utf-8", "euc-jp"); print "Content-type: text/html\n\n<html><head><meta http-equiv='Content-Type' content='text/html; charset=EUC-JP'></head><body>$str</body></html>"; -------------------------------------サンプル これってEncode.pmのバグですか?対応方法は何かありますか?
>>828 関係無いけどウェブプログラミングなら
>#!/usr/bin/perl -w
>use strict;
>use Encode;
ここは
#!/usr/bin/perl -T
use strict;
use warnings;
use Encode;
のほうが良い。
832 :
デフォルトの名無しさん :2009/01/28(水) 12:51:50
829さんのスレッドが落ちていたのでこちらで質問失礼します。 Perlで、ハッシュデータにKEYとKEYに対応した値が多数格納されているとします。 そのKEYに対応した値から、KEY自体を取り出したいのですがそれは可能でしょうか。 可能でしたら簡単なプログラム例を教えて頂けると大変助かります。
while ( ($key, $value) = each(%hash) ) { if ($value eq "うんこ") { print $key; } }
>>832 reverse使えばできる。
my %new_hash = reverse %old_hash;
これで、元のハッシュの値をキーとして、
元のハッシュのキーを値とするハッシュができる。
ただし、元のハッシュで値が同じものが2つ以上あるときには、
うまくいかないです。
835 :
デフォルトの名無しさん :2009/01/28(水) 13:27:30
836 :
デフォルトの名無しさん :2009/01/31(土) 09:16:57
正規表現なのですが <h2 class="title">を正規表現で表すと、(英数字の[0-9|a-zA-Z]は省略) <h2.\s.class=\"title\">でよいのでしょうか
聞く前に自分で試した方がなんぼか速いんでないかい
>>837 試したのですが、出来なかったので間違っていると思うのですが
どこが間違っているのかわかりません
>>838 htmlのタグで一番簡単なマッチはこの2通り
/<.*>/
/<[^>]*>/
てか正規表現のスレで聞けばはやいのでは?
>>836 "."は文字一つ食べてごちそうさま。
"\s"はスペース一つ食べてごちそうさま。
もうひとつ"."も文字一つ食べてごちそうさま。
何文字用意してあげれば、おなかいっぱいになるの?
うん、三文字。
スペース一文字じゃ、おなかいっぱいにならないね。
食べるの控えたら、だいじょうぶ?
食べるの控えたら、だいじょうぶ?
842 :
デフォルトの名無しさん :2009/02/01(日) 02:47:31
Perlのコードのことで判らないことがあるため質問させていただきます。 現在読んでいるコードに、 return 0 if ($hoge < 1); のような行があるのですが、これはどのような処理になるのでしょうか? 関数の途中にあり以下にも処理の記述があるため、私の想像では return 0 の後ろに続く、ifが真のときにreturnが実行されるかと思うのですが、 なぜこのような書き方をするのでしょうか? 私が考えるのでは、 if ( $hoge < 1) {return 0;} とすればいいかと思うのですが、何か理由があるのでしょうか? 質問をいくつもすみませんが、教えていただけるとありがたいです。
>>842 英語の表現で、
hogehoge if fugafuga
ってのがあるだろ? それをプログラミング言語の文法に組み込んだのが前者。
意味は後者と同じ。
>>843 ありがとうございます。
やはり、ただの書き方の違いだけでしたか。
>>844 >return 0 if ($hoge < 1);
>if ( $hoge < 1) {return 0;}
書き方の違いもあるけど直感でわかるかどうかも重要だから
そういう箇所は書き直していったら後から読む人は助かる箇所も出てくると思う。
それで動作しなくなったら問題なので十分に注意、検証は必要だけどね。
「orが嫌い」と言う理由で「||」に全置換かましたバカを思い出した。
処理が単文なのにいちいちブロック書くのが面倒というのもある。 さらに return 0 if $hoge < 1; とも書ける。前に書く場合は括弧が必須。 文修飾子(statement modifiers)(後ろに付ける if, unless, while, until, foreach)を使うなら 括弧を書かない場合が多いんじゃないかな。
>848 単語一致以前に or と || では優先順位が異なる。
>>850 ああ、そういう意味ですか。
operatorの「or」も置換して、operat||にしてしまうのかと思った。
普通に考えて優先順位の話ってわかるじゃん(´・ω・`)
質問なんですけど、@INCに入るパスって環境変数のPERL5LIB以外にどこからとってきてますか? zshrcには書いてあるパスの集合がAだとすると、 local/lib/perl5/5.8.8 local/lib/perl5/i386-freebsd-64int A local/lib/perl5/5.8.8/BSDPA local/lib/perl5/site_perl/5.8.8/mach ... というような並びで並んでます。 Aの前と後にどこからパスを持ってきているのかわからず。perlのコンパイルの時にそんな指定するんでしたっけ? PERLLIBも指定してなし、よくわからない
>>851 そんなこと言い出したら "or" が部分文字列として含まれる単語なんて
いくらでもあるじゃないか
このスレ見える範囲で検索しただけでも word, form, ports, livedoor とか出てきた
>>854 なるほど。ありがとうございます。
コンパイルした後に変えることは無理?
5.8.8をもう一回コンパイルし直すならいっそのこと5.10をコンパイルしようかなと思うのですけど。
use libできんのか?
>>857 use libとか@INCに入れれば解決なのだけど、
そもそもそのリストをどこからどういう順番で取ってきているかを知りたかったのです。
おれの@INC、パスがダブっちゃったりしてるから。
>>858 ソースのperl.cを参照。
ソースをそのままコンパイルして使うならまあいいんだけど、
一部のLinuxディストリによっては、これにpatchが当たってて、
読み込むパスや順番が異なってる。
>>856 > コンパイルした後に変えることは無理?
スクリプト単位なら use lib や BEGIN { @INC = ... } 。
ユーザ単位なら環境変数 PERL5LIB / PERLLIB。
システムワイドに設定したければ、sitecustomize.pl が
利用可能ならその中で好きに編集すればいい。
プログラム読んでてよくわからん構文出てきたから 最小のコードにしてみたらこうなった sub a{return [(1)x5];} @b = @{a()}; for(@b){print;print " ";}print "\n"; 2行目の@{ }で囲っているところは何をやっているのか 誰か教えて
デリファレンス
把握した
@{[ $ref ]} kore nani?
dereference
>>864 リファレンス作ってデリファレンスしてる。
無名配列を作りたい時に便利。
例えば文字 "," のカウントをしたい場合。
====
my $str = q{a,c,b,d,e} ;
#my $cnt = $str =~ /,/g ; #<= ダメ
#my $cnt = my @tmp = $str =~ /,/g ; #<= tmp 作るの?
my $cnt = @{[ $str =~ /,/g ]} ;
print $cnt . qq{\n} ;
====
最もこのケースだったら以下の方法のが遥にスマート
my $cnt = () = $str =~ /,/g ;
my $cnt = $str =~ tr/,// ;
ちなみに↓コレだと @{[]} する意味があんまり…
@{[ $ref ]} ;
これはいいもん読めた
ここまだ残ってるんだな・・・ (糞レスすまん
870 :
デフォルトの名無しさん :2009/03/25(水) 23:33:08
○○.cgiのプログラムで、 「exec △△.pl $param1」とexecを使用して呼び出しても、 呼び出し先の△△.plが実行されないです。 環境が原因と思うのですが、 初心者で何が原因かわからないです。
webprogいけ
初心者がCGIとかヤメレ
マルチ氏ね
874 :
デフォルトの名無しさん :2009/03/26(木) 06:22:15
【Yahoo!番付で亀井をMVPにしようぜwwwww】
ttp://takeshima.2ch.net/test/read.cgi/news4vip/1237983005/50 ベンチの支えあっての原JAPAN 亀井こそが真のMVP
↓
イチロー福留青木稲葉がいる外野においては常にベンチが決まっているような状態で、
でももう一人予備の外野を選ばなくてはいけなくなった。
そのような役は自軍から出さねばならないと考えた原監督は亀井に白羽の矢を立てた。
誰もが落選すると思われていた亀井だったが、最終メンバーに選ばれた。
亀井も一度は監督に辞退を伝えたが、原監督は亀井に説得を行う。
亀井は尊敬する監督にそこまで言われたら、ということで辞退を撤回。
叩かれる事が分かっていながらもベンチから声援を送り続ける。
そんな亀井はMVPに相応しい
マルチ氏ね
おまいらお願いです。 フルパス文字列から親ディレクトリ名を取り出す方法を検討中なのですが、 例) /hoge/fuga/var/foo を入れると /hoge/fuga/var が出てくる $PATH = '/hoge/fuga/var/foo'; $PATH =~ m|.*/|; $PATH = $&; $PATH =~ m|\/$|; $PATH = $`; こんな風にして一応動いたんですが、カコワルくて人に見せれないコードです。 もっとすっきりキレイに仕上げる方法がある気がしてなりません。 もっとキレイな方法を教えてもらえませんか?
my $target = '/var/www/html/index.html'; my($per_dir) = $target =~ m|(.+)/[^/]+/?|; print $per_dir,"\n"; ”親directory”とゆうことなので。 それじゃイヤンってんなら、ググるなりして調べてくれ。
>876 File::Basename の dirname 使えば?
$path =~ s/[^\/]*$//;
>>879 >>880 d。やりたかった事は、レン鯖のDOCUMENT_ROOTの1個上にDBやらパスワードの設定ファイル(xml)を置いて、それを読み込んで処理する作業だったのです。
use XML::Simple;
- 略 -
my $DOCUMENT_ROOT = $ENV{'DOCUMENT_ROOT'}; # httpサーバが表示する / ディレクトリ
my ($SETTING_PATH) = $DOCUMENT_ROOT =~ m|(.+)/[^/]+/?|; # 親ディレクトリ
my $DB_Info_XML = XMLin($SETTING_PATH. '/dbpassword.xml');
my $DB_NAME = $DB_Info_XML->{dbinfo}->{dbname};
- 略 -
という感じで実装しました。あとで
>>880 のやり方に書き換えます。^^
882 :
デフォルトの名無しさん :2009/04/01(水) 20:54:35
教えてください。 CatalystでDBIx::Class使って pagerやろうとしたのです my $rs = $c->model(..)->search({}, {page =>1, rows=>10}); $c->stash->{data} = $rs; .tt にて [% SET pager = data.pager %] [% INCLUDE pager.tt %] で、data.pagerを参照するところで Can't create pager for non-paged と言われて困ってます。 どなたか助けて頂けませんか?
883 :
882 :2009/04/01(水) 21:36:58
申し訳ありません。自己解決しました。 pageに渡している値が空のケースがあるとあのエラーがでるようです。 失礼しました。
そうねぇ、、、perl って小回り効くから確かに便利だけど、 sed+awkとして使うまでに留めておくべきだな。 技術者の力量に依るような自由な言語は、プロジェクトとしてはなるべく使いたくない。
いまどき CGI は無いだろ
>884 PerlはLL界のCOBOLになったな。
>>884 こういうの見ると「終わった感」が増して逆効果だと思うんだが・・
団結して良さを説明ようとか、方法論からして前世紀かよって思う。
「モダンPerl入門」って糞?
WEBアプリ以外はソフトウエアに非ず そんな風潮。 perl はWEBアプリ専用言語じゃないのに PHPやらASPやらJSPやら出てきたら perl はお払い箱?・・・それじゃ、かわいそうだよ。
誰か助けて下しア 環境がPERL5.8.* Jcode 2.6.5 PERL5.6.1 Jcode2.0から移したら 今までCGIで文字化けしなかったものが化けました。 $str = '莞ゲマン; $hoge = Jcode->new($str, euc)->h2z->euc; print "$hoge"; 今までは 潟zゲマン と表示されていたのに、 ?ホゲマン となります。 原因を調べていたら、5.8移行は機種依存文字は無視しないで?に変換してしまうとのことで。。。 これを 潟zゲマン となるように 解決したいのですが、どなたかご教授ください。
すません、ちなみに〜入れろ、とかは出来ない状況です。 UTF8でやれとかも無理な状態です
すません 他で聴くためこちらの回答は不要です 失礼しました
お前誰だよ
>>884-888 蛇足情報として書いておくと、米国は perl / python 使いが多い。
>>890 PerlはCみたいに残るでしょ・・・
awkは使ったこと無いw
Windows の時代になっても バッチファイルは残った。 だから Unix が GUI になっても Perl は残る。
その文脈だと、残るのは sh であって perl ではないような、、、 まあ、perl がなくなるようなことはないだろうけど。
ちょw
cshみたくpshとか出来るんじゃね?
901 :
デフォルトの名無しさん :2009/04/17(金) 00:26:46
pyshonでいいよ。
903 :
デフォルトの名無しさん :2009/04/18(土) 15:51:41
これからはパールの時代がくるのかもな
ルビーです
ルアだろ、常考
>>898 最近はMakefileでもPerlがインストールされているのを前提に
Perlスクリプトが走ったりするのがある。既にshの代替として
機能している部分があるのでなくなりはしないと思う。
逆にpythonやrubyでそんんあのみたことない。
>>885 安い人間しか雇わないなら学習コストを考えるとPerlはないな。そういう人はPHPでも使えばいい。
>>889 MooseとかモダンCatalystとかよくわからんのなら買うべき。ただし天然なのか内容が結構ピンボケしてるので、
ある程度理解したら他のソースで情報を補完する必要がある。他に代替となる本がないから「モダンPerl入門」一択なのが現状。
>>891 解決したなら解決方法書け。EUC-JPにはそんな文字ないから文字化けして当たり前。
jcode.pl使ったら解決しましたとかそういうオチじゃないだろうなw
>>895 昨日YAPCで会った米国人が、日本の本屋にPerlの本が異常に少ないのに驚いていたな。
ちなみになる早で1回作って終わりなプロジェクトならPHPでもいいが、保守を続けていくようなプロジェクトはPerl
でかっちり書くのがいい。mixiは置いといて、はてなをPHPで書いてたら今のはてなはなかった。
>>903 Perlのことならもう来てるから。ここんとこPerlの案件激増。PHPの仕事も多いがは糞なのが多く蹴ってる。
908 :
デフォルトの名無しさん :2009/09/15(火) 20:49:32
#!C:\Perl\bin\perl use encoding "cp932"; binmode STDERR, ':encoding(cp932)'; $key = <STDIN>; chomp $key; if ($key ne 'quit') { &print_randomnum; } else { print "owari\n"; exit; } sub print_randomnum{ $num = int(rand 1000000); print "$num\n"; } __END__ こんな簡単なプログラムなのに期待通りに動作しません。 quitと入力しても乱数が表示されてしまいます。どこがおかしいのか教えてください。 使用しているのはActivePerl 5.8.8 on XP Pro SP2です。
automakeがPerl依存か。 一応Pythonにはsconsがあるが、google以外では見ないな。
>>908 use encoding "cp932";
binmode STDERR, ":encoding(cp932)";
の二行消したらなったぞ
912 :
908 :2009/09/17(木) 18:08:55
みなさまご親切にありがとうございます。911さまのご指摘をわたくしも確認しました use encoding "cp932"; binmode STDERR, ":encoding(cp932)"; はウェブ上の入門講座を見て付加しました。 どうしてこの二行がこんなにおそろしい悪夢を招くのかよかったら教えてください。 講座ではシフトJISでコードを書くときに必要と説明していました。
>>912 use encoding(cp932);
とした場合、STDINからの入力値を律儀にCRLF(\r\n)にしてくれる。
でもデフォルトの場合、特殊変数$/(デフォルトの改行文字)はLF(\n)なので、
chompした際に、LF(\n)しか消してくれない。
例 入力:AAA(エンターキー)
use encoding(cp932)あり → 'AAA\r\n'
use encoding(cp932)なし → 'AAA\n'
となる。
ちなみに、(binmodeなしで)入出力時に\n←→\r\nになるのは、ActivePerl(Winのみ?)
のIOのデフォルト動作。
慣れたひとなら \r が来ても \r\n が来ても、どっちでも正しく動作するよう コーディングするもんだよ。
915 :
デフォルトの名無しさん :2009/09/18(金) 00:20:49
916 :
908 :2009/09/18(金) 10:04:45
913さま、ありがとうございました。頭がすっきりしました。
>906 LinuxのGUIアプリならPython依存をそこそこ見るが、コマンドラインだと見ないな
>>620 pl の関連付けを perl.exe から wperl.exe へ変更
wperl.exe は perl.exe と同じ場所にあります
それか、コマンドプロンプトの初期設定がコンパネから出来たような気がする
Perl質問すれなくなった
920 :
デフォルトの名無しさん :2009/11/03(火) 12:52:07
そのくらい自分でたてろよ
勉強中の者ですが 例えば2で割り切れない番目の数値を倍にするって事を やってみたのですが、$countをmap式の中に入れられる物なのでしょうか? 気持ち悪いので入れたいのですがどうすればいいんでしょう? my @input_digbit = (1,2,4,8,16,32,64); my $count; my @result = map { my $input = $_; $count += 1; if ($count % 2) { $input = $input * 2; } else { $input; } } @input_digbit;
気持ち悪がらずに慣れてください
>>921 mapで書けることは大抵foreachでいけるよ
use feature 'state' ; my @h = map { state $c = 0 ; $_ + $c++ } 0 .. 3 ;
>>921 mapを2回することになるけど、どうかな?
my @result =
map $_->[0] % 2 ? $_->[1]*2 : $_->[1],
map [ $_ + 1, $input_digbit[$_] ], 0..$#input_digbit;
>>921 reduceを使うとか?
ちょっとトリッキー?
use List::Util qw(reduce);
my @result = @{( reduce {
[ @$a, $input_digbit[$b] * ( $b % 2 ? 1 : 2 ) ]
} ([], 0..$#input_digbit) )};
よく考えたらこれでいいじゃん はは my @result = map $input_digbit[$_] * ($_ % 2 ? 1 : 2), 0..$#input_digbit;
なるほどいろいろ書き方あるんですね。
>>927 一粒($_)で二度美味しい。目からウロコでした。
やっぱfeature系が入ってくるときれいだよね //とかstateとか欲しい機能満載
930 :
デフォルトの名無しさん :2009/11/13(金) 12:13:39
///
given($hoge){ say "hoge" when 1; say "huga" when 2; } みたいなことがしたかったけどwhenは後置できないんだな
でもお前ら、偉そうなこと言ってfeatureで一番心待ちにしてるのはsayだろ?な? すでにuse feature qw/say/;とかsub say {print shift . "\n"} とかしてるやつ手を挙げろ。
use 5.010; 派
export PERL5OPT=-M5.010 派 exe 'inoreabbrev <buffer> say '. 'print, "\n";'. "<C-O>F," 派
935 :
デフォルトの名無しさん :2010/03/07(日) 23:52:03
( ´・ω・`)
936 :
デフォルトの名無しさん :2010/03/08(月) 00:18:35
(´・ω・`)
937 :
デフォルトの名無しさん :2010/03/08(月) 23:59:23
アクセスした人のポート番号80が空いてるかどうかを調べるにはどうすればいいでしょうか? REMOTE_PORT関数で調べれると思ったのですがうまくいかなくて・・・
>>937 telnetででも80番叩いてみればいいじゃん。
(´・ω・`)
>>937 最近、phpしか触ってないのでperlの方を忘れたけど、phpならこんな感じ。
function is_online($server_ip)
{
$ip = gethostbyname("{$server_ip}");
if ($fp = @fsockopen($ip, 80,$un,$sinn,2)) {
fclose($fp);
return true;
} else {
return false;
}
}
要するに、ソケットをオープンして成功すれば、そのポートが開いてるってこと。
「perl ソケットオープン」
で検索汁
アクセスした人のIPアドレスが12.34.56.78 だった場合
お手元のブラウザで
ttp://12.34.56.78/ (頭にtをつけてね)
ってやってサーバーが見つかりませんってエラーがでたら80番空いてない。
何かしら出てきたら空いてる。
これでどうよ。
>>940 あぁ、ごめん、perlスレだったw
use LWP::Socket;
my($server, $port) = ('localhost', '80');
my $socket = LWP::Socket->new;
$socket->connect($server, $port);
ただ確かめるだけならこんなんでいいんじゃない?
一週間もまえの書き込みに今更・・・
open FILE, "<:encoding(cp932)", $hage; read FILE, my $text, -s FILE; close FILE; みたいなスクリプトで cp932 *以外*のファイルを読んでしまうと cp932 "\xEF" does not map to Unicode at C:\workspace\hoge\fuga.pl line **. ってワーニングが出ますが、perlスクリプトはそのまま続行してしまいます。 ほんとうは停止してほしいんですけど、 read FILE, my $text, -s FILE or die; としても止まってくれません。 eval { ..... } die if $@; でも止まってくれません。 何か方法があれば教えてください。
>>945 local $SIG{__WARN__} = sub{ die @_ } ;
スクリプトの最初の方にでも突っ込んどけば?
use PerlIO::encoding; use Encode qw[ :fallbacks ]; # 定数の import $PerlIO::encoding::fallback = Encode::DIE_ON_ERR; open ... という風に $PerlIO::encoding::fallback に定数を入れてやると PerlIO で Encode がまずったときの動作を指定することが出来たはず. 定数については Encode の check に書いてあったと思う.
>>946 encoding使わないでdecode_utf8すれば良いんじゃない?
出力でencodeし直せばおけー
perlccがうまく動きません>< だれかこの部分だけでいいから、Cにしてくれ〜。 /^(.*) (.*) (.*) \[(.*)\] "(.*)" (.*) (.*) "(.*)" "(.*)"/;
951 :
950 :2010/04/15(木) 11:15:49
すまん、やっぱいい
952 :
デフォルトの名無しさん :2010/05/24(月) 01:43:38
953 :
デフォルトの名無しさん :2010/05/24(月) 02:30:38
955 :
デフォルトの名無しさん :2010/06/11(金) 13:46:42
/ ̄ ̄\ / ヽ、. _ノ \ | (●)(●) | | (__人__) | ヨナも そうおもう | ` ⌒´ | | } ヽ } 人_____ノ"⌒ヽ / \ / へ \ ( ヽγ⌒) | \ \  ̄ ̄ ̄\__/
956 :
デフォルトの名無しさん :2010/07/21(水) 22:32:12
クライアントがサーバへファイル名を送り、サーバがそれを検索しそのファイルを送るサーバプログラムはどうかけばいいですか? 初歩的な質問で申し訳ないですが、よろしければご教授ください。
宿題は自分でやれ
>>956 > クライアントがサーバへファイル名を送り、
ieとかでwww.yahoo.co.jp/index.htmlと入れる。
> サーバがそれを検索しそのファイルを送る
apacheがindex.htmlの内容を返す。
つまり、apache のソースを提出すればよろし
959 :
デフォルトの名無しさん :2010/08/05(木) 06:17:40
hosyu age
960 :
デフォルトの名無しさん :2010/08/07(土) 12:37:44
use strict; をすり抜けて、use warnings; で引っかかる 事例って、どんなのがあるの?
あんいにしゃらいずどばりゅうとか?
>>960 暗黙の文字列→数値変換で、文字列が数値以外の文字が含まれてるとき。
> perl -Mstrict -Mwarnings -e 'print int("1a")'
Argument "1a" isn't numeric in int at -e line 1.
1
> perl -Mstrict -e 'print int("1a")'
1
>>962 なるほど・・・
じゃああえてそういう文字列食わせたいときとかは
一時無効にする必要があるわけか
初歩的な質問ですが… use libでパスを複数指定するとエラーになったりしますか? 例えば、 hoge.pmが/home/***/perl5とかに入ってて fuga.pmが/home/***/perl5/i386-freebsdに入ってる時 二つのパスをuse libすると500になります。 かといって片方しかパスを指定しない場合はCan't locateのエラーが出ます。 どうすれば両方のモジュールを使用することが出来るのでしょうか?宜しくお願いします。
>>964 それ多分違うところでエラーでてるかContent-Type吐いてないかパーミッションがおかしいかそんなとこだろ
どうにかしてエラー内容特定汁
#!/usr/bin/perl use lib qw(/home/***/extlib/lib/perl5 /home/***/extlib/lib/perl5/i386-freebsd); use strict; use warnings; use CGI::Carp qw(fatalsToBrowser); use AnyEvent::HTTP; use Coro; print "Content-type: text/html\n\n"; print "hoge"; ↑500が出る /home/***/extlib/lib/perl5/i386-freebsdを残して /home/***/extlib/lib/perl5の部分だけ切り取り ↑Can't locate AnyEvent/HTTP.pm in @INC (... /home/***/extlib/lib/perl5を残して /home/***/extlib/lib/perl5/i386-freebsdの部分だけ切り取り ↑Can't locate loadable object for module Coro::State in @INC (... /home/***/extlib/lib/perl5/i386-freebsd/auto/Coro/Stateを追加 use AnyEvent::HTTP;があると500になるので削除 /home/***/extlib/lib/perl5だとCoroで500が返るので /home/***/extlib/lib/perl5/i386-freebsdに ↑Can't locate loadable object for module Guard in @INC (... /home/***/extlib/lib/perl5/i386-freebsd/auto/Guardを追加 ↑Can't locate common/sense.pm in @INC (...
/home/***/extlib/lib/perl5/commonを追加 ↑変わらずCan't locate common/sense.pm in @INC (...が出る 今この状態です。 もちろん #!/usr/bin/perl use strict; use warnings; print "Content-type: text/html\n\n"; print "hoge"; これはちゃんとhogeが出力されます。 どういった原因が考えられますでしょうか? 2レスに渡り長々とすみません。どうかよろしくお願いします。
968 :
デフォルトの名無しさん :2010/09/16(木) 01:31:37
969 :
デフォルトの名無しさん :2010/09/16(木) 02:31:40
>>966 extlib/ をつくった環境とちがう環境でうごかそうとしたりしてませんか?
/home/***/extlib/lib/perl5/i386-freebsd 以下のディレクトリは環境依存のものがはいっているので、環境がちがうところにコピーしてつかったりはできませんけども。
(ここでいう環境とは OS, アーキテクチャ, -Dusethreads の有無, perl5 のバージョンのことです)
970 :
デフォルトの名無しさん :2010/09/16(木) 02:41:08
>>969 レスありがとうございます!!!
でも俺のレベルだとちょっと理解しきれ無いので、教えてもらった内容に含まれてるキーワードで早速ググッてきます!
>>969 解決しました!
環境が違うってのがどういうことかわかりました!#!/usr/bin/perl環境じゃなくてモジュールをインストールしたperl環境じゃないとダメ…みたいなことですよね?
どうもありがとうございました!
PerlというかDBIで、fetchが最後まで行って終了した時に、 もう一度先頭行からループし直す時どうすればいいのでしょうか? カーソルを先頭行に戻すやり方を教えて下さい。
973 :
perl入門者 :2010/09/26(日) 10:59:18
すいません。 perlで、以下のような処理を実現したいのですが、 作成された方がいらっしゃいましたら、ご教授お願いします。 (1)「javaのプログラム内の全てのコメントを削除」して表示する (2)「javaのプログラム内のコメントのみ」を表示する よろしくお願いします。
正規表現使えばいいのでは?
Javaのコメントはネスト不可なのか でも、もしJavaがコメント内の文字列リテラルとかも認識するなら 正規表現だけでは対応できないよ、多分
とりあえず正規表現を使わないなら 行コメントは簡単だろうけど、ブロックコメントは コメントの中にいるかどうかっていう状態変数を作って 読みこみながら処理していけばいい (コメントの中にいなくて/*にであったらコメントに入る) (コメントの中にいて*/に出会ったとき、コメントの外に出る、みたいな感じで) Javaがコメント内の文字列も認識するなら コメントの中の文字列の中にいるっていう状態変数も作る もっと複雑なことをする予定ならパーサを作るほうが楽
注意すべきは文字列リテラルの中にコメントと同等のシーケンスが入っていた場合。
System.out.println("/*うんこ野郎!*/"); /*どうだ参ったか!*/
Parse::RecDescent で、文字列とコメントとそれ以外を定義
ふーん