トップページ⇒php
1001コメント356KB

Perlコーディング初心者質問スレ Part 53

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/11/26(日) 14:38:23ID:SlmGsFMB
Perlのコーディングで困ってる人のスレです。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。

1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。

最低でも1と3が無いと誰も答えられないよ。
ソース貼る時は、全角スペースでインデント忘れずに。
良い回答は良い質問から。一緒に勉強しましょう。

お勧めサイトは >>2-10

前スレ http://pc8.2ch.net/test/read.cgi/php/1153987463/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0413nobodyさん2006/12/23(土) 04:12:05ID:???
(´-`).。oO(投稿しないと見れない掲示板にどうやって投稿するのやら…)
0414nobodyさん2006/12/23(土) 04:22:04ID:???
>>413
ようするに、既にいる常連達とだけ馴れ合いたいってことだろ

パスワード制にすりゃいいのにね
0415nobodyさん2006/12/23(土) 07:57:13ID:vvP1Ez0I
改造スレいけ
0416nobodyさん2006/12/23(土) 10:26:34ID:9XJJytw/
LWP::UserAgentを用いてのPOST処理なのですが、multipleタイプのプルダウンメニューの内容全てを送るにはどうすればいいのでしょうか?

おなじnameで複数のvalueをPOSTする方法に悩んでいます。
0417nobodyさん2006/12/23(土) 10:31:34ID:???
失礼しました。HTTP::Request::Commonも使っています
0418nobodyさん2006/12/23(土) 14:34:05ID:???
PHPのmktimeやdate関数のように Y/m/d H:i:s を変換するスマートな方法はありますか?
Date::Simpleは何か違うような感じだったので

例
1900/01/01 12:00:00
↓
01/01 12:00
0419nobodyさん2006/12/23(土) 14:36:03ID:???
Date::Manipあたりは試した?
0420nobodyさん2006/12/23(土) 15:28:46ID:???
区切り子が分かってるんだから自前で用意すれば?
0421nobodyさん2006/12/23(土) 15:49:44ID:???
Date::Simpleは使いやすいけど、日にちまでなんだよな。
たくさんモジュール使っても混乱するだけだし。
いまだとDateTimeモジュールがベストプラクティスなんじゃないの。
0422nobodyさん2006/12/23(土) 16:14:47ID:MDS/ay7M
Catalystにて
Apache2 + mod_perl2

--httpd.conf------
PerlSwitches -I/var/www/Hello/lib
PerlLoadModule Hello
PerlTransHandler Hello
<Location /Hello>
PerlSetEnv Hello_DEBUG 0
SetHandler modperl
PerlResponseHandler Hello
</Location>

の設定をして、アパッチ再起動すると
WWWサーバー内のデータ全てがmod_perl2化しているようになり、
speedyCGIなどのスクリプトの動きがおかしくなるのですが、
どのように解決したらよいでしょうか
0423nobodyさん2006/12/23(土) 16:43:07ID:???
>>419
検索したけど具体的な使用例とか見つからず分かりませんですた。
でもありがとうございます。今度また調べます。

>>421
ありがとうございます。DateTimeはいい感じですね。
ttp://iandeth.dyndns.org/mt/ian/archives/000619.html

>>420
文字コード変換とかXMLパースとかも全部自前でやってろ(^ω^)
0424nobodyさん2006/12/23(土) 23:10:40ID:HvJ8lenr
あるログHTMLファイルの一番最初の<b>名前<\b>にマッチングして
$1に放りこんであるものを
そのファイルの最後の<b>名前<\b>にマッチングさせてたいのだが、、、。

0425nobodyさん2006/12/23(土) 23:17:38ID:HvJ8lenr
for ($i = 0; $i <= $#dir; $i++) {
($ts, $file) = split(/,/, $dir[$i]);
last if $ts eq ' ';
open(R, "$bbspath/$dir/$file");
@resthred = <R>;
close(R);
$resthred[0]=~ /<b>([^\<]*)<\/b>/;
$restitle = $1;
$restitle =~ s/\s+$//;
$resthred[$#resthred-1] =~ /<dt>(\d+)/;
$k = $1; # 投稿記事数
$j = $i + 1; # スレッド表示番号
if ($k ne "1") {$k = "($k)";} else { undef $k; }
$file =~ s/\.html$//;
if ($threadnum > $i) {
print W qq(<br>$j.<a href="$cgiurl$logbbscgi/$dir/${file}/" target="contents"><font size=3>$restitle$k</font></a> );
}
print W2 qq($j.<a href="${file}/">$restitle$k</a> \n);
}
#ソースはこんな感じ。
0426nobodyさん2006/12/23(土) 23:21:27ID:HvJ8lenr
$resthred[0]=~ /<b>([^\<]*)<\/b>/;

ここらへんのメタキャラクタを^から$に変えるということでもないし。
そもそもこのインデックスナンバーの意味もわからないのだが、、、。
0427410-4112006/12/23(土) 23:40:58ID:rkaYYOb9
>>412
レスありがとうございます。
考え方としては間違ってないということですね。

>>413
>(´-`).。oO(投稿しないと見れない掲示板にどうやって投稿するのやら…)

投稿していない段階では、新規書込画面しか出ないようにしたいのです。

>>414
>パスワード制にすりゃいいのにね
すでに導入しているのですが、カキコしてくれる人とそうでない人とに
不公平さが出てしまっていて悩んでいるんです。
0428nobodyさん2006/12/23(土) 23:46:08ID:MDS/ay7M
ここ間違ってない?

$resthred[0]=~ /<b>([^\<]*)<\/b>/;
<b>名前<\b> なら こうじゃないかな?
/<b>(.+)<\/b>/
0429nobodyさん2006/12/23(土) 23:46:51ID:???
もう少しデータの持ち方を工夫すると楽になると思うよ。
0430nobodyさん2006/12/24(日) 00:25:34ID:AWC9vzHT
<html><head><title>fdsfdfd </title></head>
<b>改編fdsfdfd </b></font>投稿者:<font color="forestgreen"><b>太郎 </b>
<br><hr><a name="bottom"></a><a href="index.html">掲示板に戻る</a> <a href="

まあ要するに最初の<b>改編fdsfdfd</b>になってるものを
最後の<b>太郎 </b>がひっかかるようなマッチングをしたいだけなんですが
現状はこのメタキャラクタで最初の<b>~</b>で
きちんとひっかかる。
0431nobodyさん2006/12/24(日) 00:47:39ID:???
日本語でおk
0432nobodyさん2006/12/24(日) 00:57:31ID:???
そんな簡単なマッチも書けないやつが
スクリプトで2chに負荷かけそうで心配
0433nobodyさん2006/12/24(日) 01:10:15ID:???
>>430
それちょっと前にも話題にでたけど、否定先読み使って
$regex(?!.*$regex)
で $regex にマッチする一番最後の部分が得られる。

$_ = <<EOT;
<html><head><title>fdsfdfd </title></head>
<b>改編fdsfdfd </b></font>投稿者:<font color="forestgreen"><b>太郎 </b>
<br><hr><a name="bottom"></a><a href="index.html">掲示板に戻る</a> <a href="
EOT

my $regex = qr{<b>([^<>]*)</b>};
print "$1\n" if m{$regex(?!.*$regex)};
0434nobodyさん2006/12/24(日) 01:12:35ID:???
って書いてから思ったけど、今回のケースなら別に否定先読み使わなくても
m{<font color="forestgreen"><b>([^<>]*)</b>}
でマッチできるね(´・ω・)
0435nobodyさん2006/12/24(日) 07:03:20ID:???
質問です

2項分布の計算をperlでやりたいんですが、一定の数値以上になると、階乗のところで変数の容量オーバー(? #INFとの表示)でおかしくなってしまいます

・変数の扱える桁数を大幅に増やす方法はありませんか?
・ExcelのBINOMDIST関数的なライブラリ(?)は無いのでしょうか

スレ違いだったらごめんなさい。よろしくお願いします
0436nobodyさん2006/12/24(日) 07:07:05ID:???
>>435
bigintプラグマ(整数)
bignumプラグマ(実数)
実体はMath::BigIntやMath::BigFloat
他に分数で扱うMath::BigRatもある。
0437nobodyさん2006/12/24(日) 08:00:55ID:???
>>436
ありがとうございます!
0438nobodyさん2006/12/24(日) 12:01:21ID:AWC9vzHT
>>433-434
お答えくださってありがとうございます。
しかしなかなかうまくいかないので
プロにおまかせすることも検討してます。
やはり正当な知識には正当な料金というものが発生するものという
考えが正しいのかと。
それでは。
0439nobodyさん2006/12/24(日) 12:57:49ID:???
>>438
料金云々の話は確かに間違いではないけど、何より>>424>>430の説明(≒仕様)がわかりにくいんです。
プロに頼むにしても仕様があやふやだったり後出しが続いたりすると「なかなか」なのは同じですよ。
「また仕変ですか」と呆れられたり値上がりしたりするだけですけど。

行末にある<b>太郎 </b>の「太郎 」が$1として使えるだけでいいんだったら
$ を書き足すだけでもいいのかもしれない。>>434が書いたものでうまくいかない理由は不明。
(実はcolor="forestgreen"じゃない場合があるとか、そんな問題のような気がする)

$resthred[0]=~ m|<b>([^<>]*)</b>$|; # スラッシュをエスケープするのが面倒です版
$resthred[0]=~ /<b>([^\<]*)<\/b>$/; # 元ソース使い回しました版

>>430の「最後の」が行末でも何でもない場合は、プロにお金を積む方向で。
0440nobodyさん2006/12/24(日) 14:06:39ID:AWC9vzHT
度々お答えくださりありがとうございます。
やはりなかなかうまくいきません。
「最後の」というのは行末ということではなく
加工前のログにたくさんある<b>名前</b>のなかで最後の<b>名前</b>
=最新レスポンス者の名前をひっかけたいということです。
まあ、最初からそのログを改行して区分けするというやりかたも
ありだとは思いますが。
いろいろと模索中であります。
金云々にしてはすでに三十万近くかけて作らせてるものです。
私は多少のPerl/CGI知識を持っているのですが
運用に力をいれたいほうなので外注に頼ってるわけであります。

0441nobodyさん2006/12/24(日) 14:36:15ID:???
>>440
こんなこと言うのもなんだが、
「運用に力を入れたいから知識はあるけど外注」ってレベルじゃないだろ。
その程度なら素直に信頼できる実績があるとこに外注がいい。
0442nobodyさん2006/12/24(日) 14:55:58ID:AWC9vzHT
確かにその$resthred[0]=~ /<b>([^\<]*)<\/b>$/; で
おかしくはないと思うんですが
まあ、すべてのソースをみてのことじゃないからわかりませんよね。
よく元ソースを解読してから出直します。
結果としてそのファイルのあるフォルダ名が$restitleにはいってしまうので
別の問題にも思われます。
ここまで考えて改造費出すのも個人的に馬鹿馬鹿しいので
自分なりに実験してみますわ。
御意見ありがとうございました。
0443nobodyさん2006/12/24(日) 14:58:03ID:AWC9vzHT
>>441
うるせえよ。
てめえに聞いてねえんだよ。
ガタガタ口はさむなクソが。
じゃあな。
0444nobodyさん2006/12/24(日) 15:04:54ID:???
頭が悪いのにプライドが高いと大変だな。
哀れだがなにもしてやれん…
0445nobodyさん2006/12/24(日) 15:14:21ID:???
441が回答してくれた人達かもしれないのにな
0446nobodyさん2006/12/24(日) 16:56:38ID:???
30万って、二週分にも満たないハシタガネで何イキがっているんだろう...
0447nobodyさん2006/12/24(日) 17:10:57ID:AWC9vzHT
結局、外注にしましたわ。
ただより高いものはない、なんて言うしな。
プログラミングは誰にこだわる理由はないし、
結果のでない親切より結果のでるお金だわな。
まあ、それはそれで駆け引きの技術だが。
てめえらもこんな腐れ掲示板で悪態奉仕活動してねえで
技術で金むしりとることに専念したほうがよくねえか?
俺が最初に頼んだ職人もそうだった。
あんまり調子こくんで他の外注にするつもりだが。
競争にさらされねえとそこらへんはわかんねえんだよな。
0448nobodyさん2006/12/24(日) 17:12:56ID:???
態度の豹変ぶりに笑った
0449nobodyさん2006/12/24(日) 17:14:29ID:AWC9vzHT
でもあれだね。
その職人もこういう掲示板とかで聞いたり他のソースを拾ったりして
やっつけ仕事とかしてやがんの。
おまえらそういう連中にも利用されてるんだよ。
0450nobodyさん2006/12/24(日) 17:21:57ID:AWC9vzHT
だいたいここで張りついて親切に答えてる連中はプロじゃねえだろ。
そんで聞いてる連中が要領のいい継ぎはぎ職人のプロだったら皮肉で笑えるけどな(w
0451nobodyさん2006/12/24(日) 17:24:12ID:???
>>449
その解釈は正確にはそれはちょっと違います。他ならぬ貴方からの依頼だからこそ
出来合いのソースを拾ってきてやっつけ仕事で片付けているんです。
つまり貴方はその程度の顧客です^^
0452nobodyさん2006/12/24(日) 17:28:48ID:???
そんなエサに俺様がクマー
0453nobodyさん2006/12/24(日) 17:29:35ID:AWC9vzHT
いやそれは俺がわざわざここから参考にしろってリンク張ってあげたんだよ。
フリーソフトの作者さんのサイトでねえ。
安い仕事だと思ったから。そこらへんまで譲歩したのだ。
無償のオープンソースを利用してるのはそういった要領のいいやつだ。
俺もそこらへんは共通の金銭の価値観なのでな。
0454nobodyさん2006/12/24(日) 17:35:09ID:AWC9vzHT
フリーで作ってる連中に著作権とかぐだぐだ言われるとうるせえから
変数の名前だけ変えてフルスクラッチすればとか言ってやってな。
親切だろ。
まあ、というのも俺も金儲け目的のサイトをつくろうと思ってるから
投資は必要だしな。
0455nobodyさん2006/12/24(日) 17:37:16ID:???
> 変数の名前だけ変えてフルスクラッチすれば
> 変数の名前だけ変えてフルスクラッチすれば
> 変数の名前だけ変えてフルスクラッチすれば

(゚Д゚)…!?
0456nobodyさん2006/12/24(日) 17:43:58ID:???
KE○Tでも紹介したんですか?
0457nobodyさん2006/12/24(日) 17:45:50ID:AWC9vzHT
聞いてる連中がどんな人間かわからん。
答えてる人間がどういう人間だかわからん。
ただよく無料で答えるなあとは思うわなあ。
0458nobodyさん2006/12/24(日) 17:50:31ID:???
> いやそれは俺がわざわざここから参考にしろってリンク張ってあげたんだよ。
> フリーソフトの作者さんのサイトでねえ。
> 安い仕事だと思ったから。そこらへんまで譲歩したのだ。

↓

> その職人もこういう掲示板とかで聞いたり他のソースを拾ったりして
> やっつけ仕事とかしてやがんの。

↓

> 俺が最初に頼んだ職人もそうだった。
> あんまり調子こくんで他の外注にするつもりだが。

凄い釣りだぜ…。
0459nobodyさん2006/12/24(日) 17:51:40ID:AWC9vzHT
>>456

いろいろ。
俺はねえ金を儲けたいのね。
ほんと正直な気持ち。
だから金使うのも筋だと思うわけ。
たとえ少額でも1円と無料には大きな開きがある。
君等もこんな腐れ掲示板はさっさと放棄して
私がこんどつくる掲示板を利用したほうがいいだろう。

0460nobodyさん2006/12/24(日) 17:55:19ID:???
>>459
早く作れ
0461nobodyさん2006/12/24(日) 17:55:54ID:AWC9vzHT
つまりなんかしら利益の還元があるCGIだねえ。
スロットマシーンのプログラ厶のようなものだ。
0462nobodyさん2006/12/24(日) 17:59:18ID:???
主張が右往左往していて何が言いたいのか良く分からんな。
誰か3行くらいでまとめてくれない?
0463nobodyさん2006/12/24(日) 18:00:29ID:AWC9vzHT
>>460

どうも俺はナマケモノでねえ。
先伸ばし、先伸ばしで五年はたつ。
しかしシステムは確立したよ。

0464nobodyさん2006/12/24(日) 18:01:10ID:???
>>462
脳内
設定
爆発
0465nobodyさん2006/12/24(日) 18:06:43ID:???
>>464
うはwwおk把握www

何か1ch.tvを思い出すなあ。
0466nobodyさん2006/12/24(日) 18:08:53ID:AWC9vzHT

以前、このスレッドであるメタキャラクタを
聞いたときはたまたまいい回答が帰ってきて
もうけものだったのだが
やはり無料には限界があるようだな。
無料の限界=2chの限界=匿名の君等の限界だのう。
0467nobodyさん2006/12/24(日) 18:10:52ID:AWC9vzHT
1chってあれでしょ。
利用者から金とるってやつだろ。
あんなものダメに決まってるじゃあないか。
0468nobodyさん2006/12/24(日) 18:13:51ID:???
正確には『お前の俺らから情報を引き出す力の限界』だけどな。
0469nobodyさん2006/12/24(日) 18:14:43ID:AWC9vzHT
なんだか
Perlコーディングスレなのに私の妄想のはけぐちスレにして
なにか申し訳なくってきたねえ。
まあそれも2chだからしょうがないのう。
すっきりするまでつきあってほしい。
0470nobodyさん2006/12/24(日) 18:15:46ID:???
>>430 でも >>466 でもそうだけど、パターンとメタキャラクタの区別がつかないの?
0471nobodyさん2006/12/24(日) 18:17:28ID:AWC9vzHT
情報って、、、。
なんかいい金になる情報なんかあるの?。
2chで金になる情報なんかあったためしがない。
0472nobodyさん2006/12/24(日) 18:29:11ID:AWC9vzHT
>>470

つうか今それは問い合わせ中なのでまた今度な。
まあ、そのときは自己解決しましただろうけど。
求めるととこはプラスの結果だけ。
そういうプラスの結果を出すシステムを作りたかったのだ。
なにか答える。なにか結果を出す。なにか教えてくれる。
俺は金を請求するし金は払う。
それでおしまいだな。
0473nobodyさん2006/12/24(日) 18:30:56ID:AWC9vzHT
まあ、質問には金が伴うほうを選ぶよ。
失礼しました。
0474nobodyさん2006/12/24(日) 18:30:59ID:???
>>471
それは感性の違い。
感性の無い奴には泥まみれの宝石の原石は見つけられない。








と、釣られてみるテスツ
0475 ◆TWARamEjuA 2006/12/24(日) 18:35:02ID:????BRZ(6677)
(´-`).。oO(バブル脳の戯れ言か(嬉嬉嬉))
0476nobodyさん2006/12/24(日) 18:38:57ID:???
>>472 が >>470 に対するレスとしては見当外れすぎてワロタ
0477nobodyさん2006/12/24(日) 18:41:03ID:???
みんな暇なんだなと安心するクリスマスイブであった
0478nobodyさん2006/12/24(日) 18:47:14ID:???
じゃあ質問させてくれ
文字列fooのあとに、bar以外の文字列が来て、しかも最後までにbazが現れないという
条件にマッチする正規表現が書きたくて、下のようなのを書いてみたんだけど。

/foo(?:(?:(?!bar)).(?<!baz))+$/

さすがにアレなんで、ちょっとどうにかならないものかなと。複数のパターンに分割するのはなしで。
0479nobodyさん2006/12/24(日) 19:01:58ID:???
m{foo(?!bar)(?!.*baz.*$)}
0480nobodyさん2006/12/24(日) 19:06:21ID:???
俺は面白い質問があれば答える。ただそれだけ。面白いなら宿題でも金儲けでもなんでもいい。ぐだぐだ言ってないでさっさと次の質問しろよ
0481nobodyさん2006/12/24(日) 19:08:59ID:???
>>478
>>479 で正解が出ているけれど、実際問題、可能であれば分割した方が効率と可読性の両面から好ましい場合が多い気がするよ。
0482JAPU ◆lVJAPUTeX. 2006/12/24(日) 20:55:14ID:???
s{(https?://[A-Za-z0-9./_?=-]+)}{
my $x = $1;
$x =~ /\.(?:gif|png|jpg)$/? qq{<img src="$x" alt="">}: qq{<a href="$x">$x</a>}
}eg;'
正規表現部分は適当に置き換えて。


>>422
Location の中に全部入れれば?
ちなみに、mod_perlは必要な部分だけ分離 (別サーバにするかApache2個立ち上げるか) するのがお勧め。
0483nobodyさん2006/12/24(日) 22:15:47ID:???
乗り遅れたが後悔はしない
0484nobodyさん2006/12/24(日) 22:28:56ID:???
俺も乗り遅れたが後悔はしていない
ただ1つ書くなら・・・俺はこの板でスキルアップさせてもらってる
04853732006/12/24(日) 23:22:02ID:???
>>374 遅くレスすいません以下のようにしたんですが

if (!open(WORD,"bad.txt")) { &error('データベース読取エラー'); }
foreach(<WORD>){
chomp;
if ($name eq $_){ $name = "禁止";}
}
close(WORD);

これであってますか・・? と、いうか禁止ワードに反応なしなので
未だにできてません(´Д⊂)
0486nobodyさん2006/12/24(日) 23:40:55ID:5VuL7TZS
>>485
$name に何が入ってるのかわからんけどさ
$name =~ /$_/ig;
にしたら?
iオプションは必要だけどgオプションが必要かどうかは自分で決めてね
0487nobodyさん2006/12/24(日) 23:44:25ID:5VuL7TZS
それでも引っかからなければ文字コード
両方コード揃えてひっかければいい
これでダメなら他が悪い

use Jcode;
$name = jcode->($name)->euc;

if (!open(WORD,"bad.txt")) { &error('データベース読取エラー'); }
foreach(<WORD>){
chomp;
$temp = jcode->($_)->euc;
if ($name eq $temp){ $name = "禁止";}
}
close(WORD);
0488nobodyさん2006/12/25(月) 02:20:59ID:WCngGP1U
$fooにfooという文字列、$hogeにhogeという文字列が入っているとして、
$barにはfooを含む文字列が入っているとすると、

$bar =~ s/$foo/$hoge/;

としても置き換えはされないのですが、

$bar =~ s/foo/$hoge/;

としたら置き換えがされるのは何故でしょうか?
$fooが評価されていないということは分かったのですが、何故かが分かりません。
0489nobodyさん2006/12/25(月) 02:30:55ID:???
>>488
ん?

my $bar = 'foo!foo!foo!'; my $baz = $bar;
my $foo = 'foo'; my $hoge = 'hoge';

$bar =~ s/$foo/$hoge/g;
$baz =~ s/foo/$hoge/g;
print $bar, "\n", $baz;
--
hoge!hoge!hoge!
hoge!hoge!hoge!
0490nobodyさん2006/12/25(月) 02:35:21ID:WCngGP1U
>>489
なに・・・!
なぜでしょう・・・(´・ω・`)

実際のプログラム中ではオブジェクトとして扱っているのは関係あるのでしょうか?
($fooは実際は$self->{foo}->{bar}としている)

$bar =~ s/$self->{foo}->{bar}/$self->{foo}->{hoge}/;
0491JAPU ◆lVJAPUTeX. 2006/12/25(月) 03:01:53ID:???
>>486
g は全く要らない。
i は必要とは言えない。

>>488
実際には foo は日本語で、しかも Shift_JIS 使っているなら、
$bar =~ s/\Q$foo/$hoge/;
としてみては?
0492nobodyさん2006/12/25(月) 03:09:41ID:WCngGP1U
>>491
日本語じゃなく、文字コードを指定していなかったんですけど、\Qを挿入したら出来ました・・・

\Q : \E までのパターン指定メタ文字の意味を打ち消す

(´・ω・`)ナゼ?
0493nobodyさん2006/12/25(月) 03:16:49ID:WCngGP1U
$bar =~ s/$self->{foo}->{bar}/$self->{foo}->{hoge}/;において、$self->{foo}->{bar}にパターン指定メタ文字が含まれていたのでしょうか・・・

あ、ご解答下さったみなさん、ありがとうございました!
0494nobodyさん2006/12/25(月) 05:19:01ID:???
s///e;
0495nobodyさん2006/12/25(月) 06:46:37ID:85L6NXNb
>>491

>g は全く要らない。
>i は必要とは言えない。
gは全くいらなかったね置換するわけじゃないしね
iは日本語と決まってるならいらないだろうけどsexとかだったらいるんじゃねえ?
0496nobodyさん2006/12/25(月) 07:23:16ID:???
sex!sex!sex!
0497nobodyさん2006/12/25(月) 08:45:43ID:???
バカは回答すんなよ
0498nobodyさん2006/12/25(月) 13:28:03ID:bvP5u9Gv
何故か「ー」の置換が出来ません。
他の日本語や、逆(〜をーにする)は出来ます。何故なんでしょうか?

print "content-type: text/html\n\n";

$str = "ボール";
$out = "ー";
$in = "〜";

$str =~ s/$out/$in/;
print $str;
0499nobodyさん2006/12/25(月) 13:52:39ID:ClYkzmks
use Foo;
use ...;
use ...;

と、複数のpmファイルをuseしたのですが、先頭行のuseだけにエラーが出ます。

Can't locate Foo.pm in @INC (@INC ...

ちゃんとFoo.pmは存在するし、他の行のuseにはエラーが出ないのですが・・・
このエラー文は、モジュールがインストールされていないという意味のほかに、なにか意味はあるのですか?
05004992006/12/25(月) 13:58:43ID:ClYkzmks
何度もすみません。

use Foo;
use Hoge;
use ...;
use ...;

だとFoo.pmに関して、

use Hoge;
use Foo;
use ...;
use ...;

だとHoge.pmに関してしてエラーが出ていたようです。
@INCの検索パスにそれらのファイルが含まれていないということでしょうが、ちゃんとそのディレクトリに置いてあるんです\(^o^)/オワタ
0501nobodyさん2006/12/25(月) 14:26:49ID:???
>>498
つEUC
0502nobodyさん2006/12/25(月) 14:29:15ID:???
use lib しなけりゃエラーが出て当然だと思いますが・・・
05034992006/12/25(月) 14:29:36ID:ClYkzmks
>>502
use libは宣言しています。
05044992006/12/25(月) 14:36:15ID:ClYkzmks
問題のファイルは以下のものです。
http://www.uploda.org/uporg630190.zip.html

(pass : 2ch)

use lib qw(./lib);
use Common::Cookie;

として使用しています。
なにかファイルに問題はありますか?
0505nobodyさん2006/12/25(月) 14:48:11ID:???
/lib/Common/Cookie.pm にしてますか?
05064992006/12/25(月) 14:51:36ID:ClYkzmks
>>505
はい、呼び出し側との相対パスは./lib/Common/Cookie.pmです。
0507nobodyさん2006/12/25(月) 15:10:41ID:???
>>498
\Q \E
0508nobodyさん2006/12/25(月) 19:38:47ID:ClYkzmks
\r\n、\r、\nは<BR>に変換するけど、<BR>はどの改行コードに戻せばいいの?
対象のOSによって変わると思うんだけど・・・
0509nobodyさん2006/12/25(月) 19:52:10ID:???
\x0d\x0a|\x0d|\x0a
お好きなのをどうぞ
0510nobodyさん2006/12/25(月) 19:56:04ID:???
その「お好きなの」をどれにするかで迷ってんじゃね?
0511nobodyさん2006/12/25(月) 19:57:38ID:ClYkzmks
はい。
プラットフォームによって改行コードを勝手に決めてくれたりは出来ないんですか?
0512JAPU@坂井恋夏 ◆lVJAPUTeX. 2006/12/25(月) 20:23:02ID:???
>>492
記号類はメタ文字 (特殊文字) になるものがあるので、よく分からなければ \Q$var\E しておくのが良いです。Shift_JISの場合、漢字の一部にメタ文字が含まれる可能性があるので、思わぬところでエラーとなります。

>>495
要件に「大文字小文字を区別するかどうか」が含まれていないため、必要に応じて i 修飾子を付けてください、という意味です。

>>498
文字コードはShift_JISを使っていますね。「ー」の2文字目は「[」であるため、バイト単位で処理する場合にはそれがメタ文字として見なされます。
ですから、以下のような方法で回避する必要があります。

1. >>501 EUC-JPを利用する。
2. >>507 \Q$out\E とする。
3. Jperlを利用する。(今となってはお勧めできない)
4. 入出力をきちんとハンドリングして、内部では常にutf-8フラグつきの文字列として扱う。(多少面倒だが漢字も1文字単位で処理できるのでお勧め。「Perl utf8」でググれば参考サイトは沢山出てきます。)
5. 先頭で use encoding "Shift_JIS"; する。(あまりお勧めできない)
他にあったっけ?

# Shift_JISでは /セーラープルート/ がエラーになるので悲しい。
0513JAPU ◆lVJAPUTeX. 2006/12/25(月) 20:23:36ID:???
>>506
ライブラリの位置を指定する (-Iオプションや use lib) 際、相対パスの基準位置はカレントディレクトリです。また、use でエラーになった場合にはそれ以降の use は実行されずモジュールが存在しない場合でもエラーが出ません。
スクリプトの位置を基準点とした相対ディレクトリで指定したい場合には以下のように FindBin を利用します。

use FindBin;
use lib "$FindBin::Bin/lib";

>>508
Unix: LF (\r\n)
DOS/Windows: CRLF (\r\n)
Mac: 昔はCR (\r) だったけど今どうなの?
意識して変換するのであれば、CRLFにしておくのが無難だとは思う。Perl v5.8では、以下のようにしてPerlIO階層で変換してくれるので便利。(ファイルに出力するのであれば open 時に指定することも可能。)
binmode STDOUT, ":crlf"
■ このスレッドは過去ログ倉庫に格納されています