Perlコーディング初心者質問スレ Part 55
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/05/30(水) 11:34:01ID:???【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません。
1: 自分はこういう事がしたい。
2: それでこんな風にやってみたが・・・
3: こんなエラーが出て上手く行かなかった。
最低でも1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
お勧めサイトは >>2-10
前スレ http://pc11.2ch.net/test/read.cgi/php/1171102883/
過去ログ倉庫 ttp://user.ftth100.com/mirrorhenkan/perl/
0631630
2007/08/03(金) 01:38:06ID:???0632629
2007/08/03(金) 01:45:51ID:???氏ねって書かれるんだろうけど、ローカルでテストできる環境を整えたり、
telnetでperl -cできる環境を持てる初心者って、あまりいなそうな気がするけどね。
この人だって、エスケープしたり、"を閉じ忘れるくらいの初心者なわけだし。
俺は未だにローカルでテストできる環境を持ってなかったりするし、排他処理にflockを使ってたりするから、
windowsで書いてて、なかなか満足するテスト環境にも恵まれてない。
今はようやくtelnetが使える外部鯖が手に入ったから、コマンドラインでチェックできるけど、
何がいいたいかというと、文法をチェックできる環境を整えるのって、cgiをいじったりするより、
案外難しいんだってこと。
0633nobodyさん
2007/08/03(金) 01:57:50ID:???えと、いちおうその辺も想定しまくったうえで
せめて use CGI::Carp qw(fatalsToBrowser); でも入れてね
「500エラーです」では何もわからないけど、まともなエラーメッセージ出るようになるよ
という気持ちで書いたわけですよ。
「氏ね」と思う人も当然いるだろうし、「環境構築とかわかんねーよ」な人もいるんだろうけど
それについてあーだこーだ言うつもりはないんです。少なくとも「氏ね」とは思ってません。
0634629
2007/08/03(金) 02:06:36ID:???いや、別に俺もそんなに反論的な意見でもなかったです^^
use CGI::Carp qw(fatalsToBrowser);
は俺も使ってますが、結構ダメなこともあるんで、正直微妙ですw
0635nobodyさん
2007/08/03(金) 02:11:08ID:???勉強の為に
> use CGI::Carp qw(fatalsToBrowser);
のダメなところを教えていただけませんか?
0636nobodyさん
2007/08/03(金) 02:15:29ID:???俺も初心者だから、よくわかんないけど、
> use CGI::Carp qw(fatalsToBrowser);
って書いてても、500が出るときは出るってこと。
perl -wcより、出てくるメッセージは親切だと思う。使って損はない。
0638nobodyさん
2007/08/03(金) 08:20:11ID:???できもしないこといわないでくださいw
0639nobodyさん
2007/08/03(金) 08:49:48ID:???流行ってんの?
http://pc11.2ch.net/test/read.cgi/tech/1150900544/78n
http://pc11.2ch.net/test/read.cgi/tech/1181500187/757n
0640nobodyさん
2007/08/03(金) 08:57:50ID:???0641nobodyさん
2007/08/03(金) 09:47:07ID:???俺のバックには○○がついてるんだぜ!みたいな…
ねらー気取ってんじゃねぇよカス厨
自分で何もできないくせに虚勢張ってんじゃねぇよばーか^^
0642nobodyさん
2007/08/03(金) 09:54:48ID:???> use CGI::Carp qw(fatalsToBrowser);
を入れて500が出るなんて、シェバング間違えてるぐらいじゃないか。
0643nobodyさん
2007/08/03(金) 10:26:00ID:???2ちゃんねら総力を挙げて。
0644nobodyさん
2007/08/03(金) 11:22:32ID:???0646nobodyさん
2007/08/03(金) 15:05:53ID:???0647nobodyさん
2007/08/03(金) 16:08:03ID:???0648nobodyさん
2007/08/03(金) 17:19:15ID:???どんなけ長い用語だよ
0649nobodyさん
2007/08/03(金) 22:35:25ID:oY004xfPさらにplがあるところからDBにアクセスする
ということをしたいのですが、うまくいきません。
手法としては、plから相対でDBにアクセスするか、
plの絶対アドレスからアクセスしたいと思っているのですが、
どのようにすれば可能でしょうか?
0650nobodyさん
2007/08/03(金) 22:53:25ID:???0651nobodyさん
2007/08/03(金) 22:56:09ID:???おまえは文章もまともに書けないのか?
0652nobodyさん
2007/08/03(金) 23:21:30ID:oY004xfPライブラリ自身の絶対パスを取得する方法はありませんか?
0653nobodyさん
2007/08/04(土) 00:01:01ID:???0654nobodyさん
2007/08/04(土) 00:21:38ID:???use File::Spec;
use Cwd;
print File::Spec->catfile(getcwd, __FILE__);
0655nobodyさん
2007/08/04(土) 00:33:18ID:TU5rHtE+ありがとうございます。問題解決しました
0656nobodyさん
2007/08/04(土) 16:32:08ID:???bbbb
aaaa ←ここをggggにしたい
dddd
eeee
cccc
aaaa
ffff
って感じで改行(\n)で区切られたデータファイルがあって、
そこに新データggggを書き込みたいのですが、
その際にaaaaが存在すれば一番最初にあらわれるaaaaのところに
ggggを上書きしたいんですが、どうすればよいでしょうか。
・aaaaが存在しなければ通常通りにデータ末尾にggggを
・二番目以降のaaaaはそのまま置き換えない
を実現したいのです。
下だと失敗してしまいます。
よい方法をお願いできませんでしょうか。
open(f,"+<hoge.dat");
flock(f,2);
$data = <f>;
if($data =~ m/aaaa/){$data =~ s/aaaa/gggg/;}
else{$data .= "gggg\n";}
seek(f,0,0);
truncate(f,0);
print f $data;
flock(f,8);
close(f);
exit;
0657nobodyさん
2007/08/04(土) 17:05:20ID:???$hoge_of{aaaa} == 1のとき $data = 'gggg'
$hoge_of{aaaa} != 1のとき $data .='gggg'
0658nobodyさん
2007/08/04(土) 17:13:18ID:???で終わり
0659nobodyさん
2007/08/04(土) 17:16:52ID:+PxwZdc+flock(FILE, 2);
my @dat = <FILE>;
my $hit;
foreach(@dat){
if(/^aaaa$/){
$_ = 'gggg';
$hit = 1;
last;
}
}
push @dat, "gggg\n" if !$hit;
seek(FILE, 0, 0);
print FILE @dat;
truncate(FILE, tell(FILE));
close(FILE);
0660nobodyさん
2007/08/04(土) 17:30:25ID:RQKCxjR+(Windows使用)
ttp://www.activestate.com/downloads/
0661nobodyさん
2007/08/04(土) 17:36:26ID:+PxwZdc+http://www.activestate.com/store/download.aspx?prdGUID=81fbce82-6bd5-49bc-a915-08d58c2648ca
0662nobodyさん
2007/08/04(土) 17:43:21ID:RQKCxjR+どれを選択すればいいんですか?
Windows (x86)
AS package
MSI
Windows 64-bit (x64 AMD64)
AS package
MSI
0663nobodyさん
2007/08/04(土) 18:25:57ID:???http://downloads.activestate.com/ActivePerl/Windows/5.8/ActivePerl-5.8.8.822-MSWin32-x86-280952.msi
0664nobodyさん
2007/08/04(土) 18:30:12ID:???64bit は OS が 64bit である場合のみ
既に開発してて過去の古いソースが有りソレを何が何でも生かしたいのであれば 5.6 系がいいかもしれないけど
そうでなければ Perl は Ver 5.8 系をオススメ
0666nobodyさん
2007/08/04(土) 19:53:57ID:???build815もいいけど、816はバイナリ互換がないから死ぬ。
0669nobodyさん
2007/08/05(日) 05:40:21ID:ZbLLWuy9jcode.plって必ずつかわなければいけないのでしょうか?
文字コードはeucで作る予定です。
0671nobodyさん
2007/08/05(日) 09:31:45ID:???0672nobodyさん
2007/08/05(日) 10:59:54ID:???# 新しいJcodeはEncodeのラッパーだったっけ?
0673nobodyさん
2007/08/05(日) 11:07:42ID:???です
Encode.pm が全部やってるはず
0675nobodyさん
2007/08/06(月) 17:56:09ID:???入荷毎の履歴から古いものから順番に在庫を減らす工程がわかりません。
$num='30';
---log
1<>29<>
2<>4<>
3<>16<>
---
というログをwhileで読み込んで行き、
$readline_num-$num がマイナスになるようなら
差分数値を次のreadline_numに…
という流れだと思うのですが
どうにもこうにも形にできません。
結果的には最初のlogが
---log
1<>0<>
2<>3<>
3<>16<>
---
という風になり、最終的に全部が0になるようならエラーを返したいのです。
アドバイスよろしくお願いいたしますm(_ _)m
0676nobodyさん
2007/08/06(月) 18:03:22ID:???0677nobodyさん
2007/08/06(月) 18:06:59ID:???テキスト系DB作ってる人って、区切り文字は何にしてる?
俺はタブなんだけど、<>って良く見るけど、どういう意味があるんだろう。
データに<>を含まないからっていうのは、もちろんだけど。
0679nobodyさん
2007/08/06(月) 18:32:44ID:???全部排除する前提だから<>という入力は
100%ありえないという前提で<>にしている、と思う
0680nobodyさん
2007/08/06(月) 18:37:53ID:???フィールドが数十個あって、レコードが1000以上とかあると、バカに出来ないような気がする。
まあ、大量のデータ扱うなら、DB使えっていうことでFAなんだろうけどw
0681nobodyさん
2007/08/06(月) 18:43:51ID:???DB使うかといったあたりで場合に応じて使い分けだな。独自形式でテキストに保存って
いうのは基本的にやらない。
0683nobodyさん
2007/08/06(月) 18:59:48ID:???whileでループ作って1行ずつマイナス処理してマイナスなら数値を0に置き換えて次の行、
プラスならその数値に置き換えてループ脱出して終了
ファイル(または配列)の終端に達したら、エラー送出してループ終了
でいいんじゃないの?
とりあえずなんかコード書いてみれば?
0685nobodyさん
2007/08/07(火) 02:30:26ID:???0686669
2007/08/07(火) 02:43:38ID:???たくさん回答頂いてしまい恐縮です。
Encode.pmを使ってみることにします。
ありがとうございました。
0687nobodyさん
2007/08/07(火) 09:10:50ID:???0688nobodyさん
2007/08/07(火) 10:41:18ID:???日本語入力がある場合は結局jcode.plが最適だったのでは。
0689nobodyさん
2007/08/07(火) 10:50:16ID:???0690nobodyさん
2007/08/08(水) 08:23:14ID:???何をもって「完全」かは知らんけど、Encode::JP::H2Z のような実装は
用意されている。jcode.pl は UTF-8 扱えない時点で選択肢外なので、
1. Encode + 自前の補助コード
2. Jcode Ver 0.88
3. Unicode::Japanese
の優先順位で使ってるかな。
0691nobodyさん
2007/08/08(水) 10:53:06ID:???みなさんどうしてますか?
0692nobodyさん
2007/08/08(水) 21:52:51ID:???cp932にしたら大分マシになると思う。
0693nobodyさん
2007/08/08(水) 23:28:38ID:???シフトJIS使うときは、
2バイト文字の後半部分がC5のもの、
たとえば表とかつかうときは
表¥
ってしないと文字化けするから!
とかって書いてあって、はぁ?とおもった
これってperlでなくてもwebアプリつくるひとは
全員必須の知識なの?
0694nobodyさん
2007/08/08(水) 23:34:32ID:???0695nobodyさん
2007/08/09(木) 00:51:15ID:???0696nobodyさん
2007/08/09(木) 00:55:40ID:???0697nobodyさん
2007/08/09(木) 01:01:57ID:???0698nobodyさん
2007/08/09(木) 01:22:31ID:???0699nobodyさん
2007/08/09(木) 01:59:23ID:???0700nobodyさん
2007/08/09(木) 03:02:11ID:???設置サーバや運用者の技術レベルによってはありかもね。
「文字コードって何?」ってレベルだと Shift_JIS で問題が
出ないよう作った方が後々面倒が無くていいけど。
0701nobodyさん
2007/08/09(木) 08:19:14ID:???表示される文字が変更されない
my $msg="abcdefg ".$DT->{unkoname}."あいうえお".$count."かきくけこ";
このあいうえおの部分を
test
に変更して
my $msg="abcdefg ".$DT->{unkoname}."test".$count."かきくけこ";
にしたのに、表示されるのはあいかわらずあいうえおのまま。なんで?
0702nobodyさん
2007/08/09(木) 09:15:01ID:4ANcM0VHどのようにしたらいいのでしょうか?
0704nobodyさん
2007/08/09(木) 09:47:24ID:???スクリプト更新したからデーターが壊れたかも
「スクリプトをいじるときには
必ず管理モードにしてください、そうでないと
最悪、データーが壊れます」
って説明書読んだら書いてあった
0706nobodyさん
2007/08/09(木) 11:14:03ID:???0707nobodyさん
2007/08/09(木) 11:17:39ID:???0709nobodyさん
2007/08/09(木) 12:31:51ID:UyK8ofDd0710nobodyさん
2007/08/09(木) 13:28:54ID:???0711nobodyさん
2007/08/09(木) 13:57:44ID:???インストール先を別ディレクトリにして、環境変数PATHの設定や
PPMの設定ファイルをちょこちょこ変更するだけで普通に使えている。
0712nobodyさん
2007/08/09(木) 18:13:34ID:???0713nobodyさん
2007/08/09(木) 19:18:02ID:???0714nobodyさん
2007/08/09(木) 20:28:15ID:qod+hj3tくれるものなのでしょうか。
ご教示いただけますと幸いです。
0715nobodyさん
2007/08/09(木) 20:33:12ID:???0716nobodyさん
2007/08/09(木) 20:33:24ID:???0717nobodyさん
2007/08/09(木) 20:42:53ID:???今からでは試すのにちと間に合わなかったので(あさって納品)
質問させていただきました。
>>716
なるほど。
危なそうなので別の方式をとります。
有難うございました。
0718nobodyさん
2007/08/09(木) 20:44:14ID:???タブ区切りにしている。
タブは空白文字に置換しても差し支えない場合が多いことと、CSV程ではないけどExcelで読み込みやすいため。
>>680
せこいこと言うと、Perlなんて遅いから全部アセンブラで書くべき。:-p
>>702
Cygwin入れて、片方は
/usr/local/perl5.6
みたいなディレクトリにインストールする作戦も。
エスパーになって考えてみた。(在庫減らすところだけ。)
@zaiko = ({id => 1, num => 29}, {id => 2, num => 4}, {id => 3, num => 16})
という配列に読み込んだと想定。
my $i = 0;
while($herasu and $i < @zaiko and $zaiko[-1]{num}) {
my $s = min($zaiko[$i]{num}, $herasu);
$zaiko[$i]{num} -= $s;
$herasu -= $s;
$i++;
}
0723nobodyさん
2007/08/10(金) 11:00:12ID:???実物の在庫管理をどうするか、という問題の方が大きいような希ガス。perlの話と離れてスマソ
0724nobodyさん
2007/08/10(金) 12:55:11ID:???そうですね、排他処理は色んな方のスクリプトを参考にしていきます。
どの段階、実在庫管理、というのは永遠の課題です。アドバイス感謝です。
0725nobodyさん
2007/08/10(金) 18:54:38ID:???廃業するべき。
0726nobodyさん
2007/08/10(金) 19:01:05ID:???0727nobodyさん
2007/08/10(金) 23:52:43ID:???発想を逆転させるんだ。
0728nobodyさん
2007/08/11(土) 03:10:13ID:???0729nobodyさん
2007/08/12(日) 12:56:10ID:???0730nobodyさん
2007/08/12(日) 21:21:39ID:sl0Dt6RW$byte = length($char)とすると当然ながら答えはどれも1になります。
現在は
utf8::encode($char);
$byte = length($char);
urf8::decode($char);
として凌いでいますが、もう少しスマートなというか、
違う書き方できますか?
■ このスレッドは過去ログ倉庫に格納されています