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/
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);
として凌いでいますが、もう少しスマートなというか、
違う書き方できますか?
0731nobodyさん
2007/08/12(日) 21:38:11ID:???0732nobodyさん
2007/08/12(日) 21:41:18ID:???0733730
2007/08/12(日) 22:01:23ID:sl0Dt6RWありがとうございます!
そんなuse文があったとは知りませんでした。
パッケージ内のサブルーチンでの扱いでしたので、
サブルーチン(ブロック)の先頭にuseを置いてみましたm(_ _)m
0734nobodyさん
2007/08/14(火) 17:47:49ID:???正規表現で
($prm !~ /(?:\x82[\x9F-\xF1]|\x81[\x4A\x4B\x54\x55])/)
と書くことによって一応ひらがなを識別できるようにはなったんですが、
他の文字も混ざってしまうと判定ができなくなります。
例えば「aaaaaaあaaaa」のように一文字だけひらがなが入っていた場合エラーにする事ができないのです。
全て英字なら問題はないのですが。。。
ひらがなのみを受け付けるようにするにはここからどう改造すればよろしいのでしょう?
0735nobodyさん
2007/08/14(火) 17:56:04ID:???で
0737nobodyさん
2007/08/14(火) 18:38:42ID:???0738nobodyさん
2007/08/14(火) 20:44:26ID:5P93CXGl#!/usr/bin/perl -w
use strict;
my $a="Hello, world.";
my $s=substr($a, 0, 5, "Goodbye");
print $s;
を実行したところ、
Hello
と出力されました。
『初めてのPerl』第3版254ページによると、
Goodbye,world
になるはずなのですが、そうなりませんでした。
Perl 5.8.8を使っていますが、これはどういうわけなのでしょうか?
部分文字列を指定した文字列で置換して代入することをやるにはどうすればいいのでしょう?
宜しくお願い致します。
0739nobodyさん
2007/08/14(火) 20:51:37ID:???戻りは置換された文字列
$a を出力してください
ついでに書くと $a と $b は使用しないように
0740nobodyさん
2007/08/14(火) 20:56:14ID:5P93CXGlありがとうございます。
教えてくださったようにやると、うまくいきました。
$a,$bの件、気をつけます。
ありがとうございました。
0741nobodyさん
2007/08/16(木) 01:34:19ID:???実体参照を出力するんだけど
&アンパサンドと
;セミコロンを含んじゃうので、
この場合、”ダブルクオーテーションで囲むのと、
’シングルクオーテーションで囲むのと、
どちらがより適切ですか?
ページの閲覧者はアメリカ人で
文字コードのデフォルト設定はたぶんUS-asciiとかで、
ソースファイル自体の文字コードはシフトJISです。
0742nobodyさん
2007/08/16(木) 01:38:20ID:???;セミコロンだったらどっちでもいい。
個人的には変数展開しない’シングルクオーテーションの方が軽くていいかなと思うけど、
$hoge = 'ぬるぽ';
print 'ぬるぽ'.$hoge;
print "ぬるぽ$hoge";
ってどっちが軽いんだろう。
0743nobodyさん
2007/08/16(木) 01:52:58ID:???perlが、
「ああ、、、ここでこの行は終わりなんだな(ニヤリ」
とかって解釈して、勝手に行が終わるかと思ったんですよ。
0744nobodyさん
2007/08/16(木) 01:56:19ID:???エスケープしたりとか、
&アンパサンド自体を実体参照にしたりとか、
なにか特別な処理をしなくてもいいんですか?
0745nobodyさん
2007/08/16(木) 05:28:27ID:???0746nobodyさん
2007/08/16(木) 09:58:58ID:???>>741-744 は
Perlについての質問箱 32箱目
http://pc11.2ch.net/test/read.cgi/tech/1186995713/
プログラム板の上記のスレで暴れてる
1. 読まない
2. 調べない
3. 試さない
4. 理解力が足りない
5. 人を利用することしか頭にない
クンなので、ここの住人の皆さんも華麗にスルーする事をオススメします。
もしくは、このスレの低レベルさを証明する為答えてやっても結構です。
何卒、ご協力宜しくお願いします。
0748nobodyさん
2007/08/16(木) 11:58:57ID:???0749nobodyさん
2007/08/16(木) 21:38:37ID:IWfAsW1Mprint "Content-Type: text/html\n\n";
と出力してしまったHTTPヘッダを次の行で削除することは
できないものでしょうか。
もし方法があればどうかご教示ください。
0750nobodyさん
2007/08/16(木) 21:46:32ID:???0753nobodyさん
2007/08/16(木) 21:57:42ID:???ある奴は俺だけじゃないはずw
0754nobodyさん
2007/08/16(木) 22:42:00ID:???事情は、>>753のとおりです。
一番先頭に出力させてしまい、500行目くらいでlocation使わなけれ
ばならなくなってしまい、どうにかできないものかと思った次第です。
できないとわかっただけで収穫です。
感謝です。
0755nobodyさん
2007/08/16(木) 22:52:41ID:???あるあrw
>>754
そういう場合は先に条件判定させて、真偽によってサブルーチン使ったりして別々にすればおkかと。
0756nobodyさん
2007/08/17(金) 00:55:10ID:NJG0WVbrperlからpostgresqlを利用したいと思いpostgresqlを調べ始め、なんとかローカル上
ではサンプルDBとか作成できたんですが、DBって1つのファイルじゃないんですか?
perlのcgiファイルみたいにサーバへアップロードするにはどうすればいいんでしょうか?
それと、ローカル上で作成したDBにperlから接続しようとしてるのですが、
Perhaps the DBD::Pg perl module hasn't been fully installed
というエラーが出てしまいます。
DBIモジュールはppmからインストールしいて、再インストールしようとしても
Package 'DBI' is already installed となっています。
DBIモジュール以外に何か足りないのでしょうか?
0757nobodyさん
2007/08/17(金) 01:14:19ID:???0758nobodyさん
2007/08/17(金) 02:05:15ID:???ひとつのファイルとしてDBを組んで、
アップロードしたいならSQLiteでも使いなさい。
DBIだけでなくDBDのインストールも必須。
0759nobodyさん
2007/08/17(金) 02:15:56ID:???こっちの方がスマートじゃない? そうでもないかな?
(1) 変数 $output を用意する
(2) ソースの途中でprintは使わず、代わりに $output へ文字列を追加するようにする
(3) 最後に$outputを出力
変数に代入するだけなら、幾らでもやり直しができる。
0760nobodyさん
2007/08/17(金) 02:38:15ID:???0761nobodyさん
2007/08/17(金) 10:52:09ID:???pg_dumpして、ファイルをアップロードが一番安全だろうけど、権限が必要。
専用鯖なら問題なしだけどね。
DBD::Pgは、theoryx5をリポジトリに追加で行けると思う。
追加方法については、ぐぐってくれ。
0762nobodyさん
2007/08/17(金) 12:05:57ID:kNB1PTWdhttp://aaa.com/
というURLに
http://aaa.com/aaa/aaa.cgi
とくっ付けたいのです。
$url ="http://aaa.com/";
$url = $url."aaa/aaa.cgi";
とやっても
2行に表示されてしまいます。
http://aaa.com/
aaa/aaa.cgi
こんな感じになってどうすればいいのやら・・・
0763nobodyさん
2007/08/17(金) 12:17:14ID:???$url ="http://aaa.com/";
の一番最後に改行コードが混じってないか調べる。
0765nobodyさん
2007/08/17(金) 19:23:59ID:5ZhoqBhgピュアパールのモジュールを使いたいのですがどのようにしたら良いでしょうか?
0766765
2007/08/17(金) 19:30:54ID:???0767nobodyさん
2007/08/17(金) 19:43:10ID:???use lib qw(./path);
で
そんなの糞環境にしかならないですし use が使えないわけ無いのでは?
0768nobodyさん
2007/08/17(金) 20:07:18ID:???って設定のサーバーが結構あるよ。
0769nobodyさん
2007/08/17(金) 20:44:42ID:???Perlインストール時にuse使えないようにコンパイルした可能性がないとも言えない
0770nobodyさん
2007/08/17(金) 20:51:26ID:???0771nobodyさん
2007/08/17(金) 22:20:54ID:???0772nobodyさん
2007/08/18(土) 00:34:04ID:???0773nobodyさん
2007/08/18(土) 12:44:15ID:???0774nobodyさん
2007/08/18(土) 12:47:38ID:???・専鯖、ハウジング系
・自宅鯖(Windows系)
・自宅鯖(UNIX系)
・レンタル鯖(月5000円以上)
・レンタル鯖(月1000円以上) ○
・レンタル鯖(月500円以上)
・レンタル鯖(月500円未満)
・無料のレンタル鯖
・プロバイダーの無料スペース
0775nobodyさん
2007/08/18(土) 12:53:27ID:???0776nobodyさん
2007/08/18(土) 14:09:22ID:???サーバー管理は出来ない知り合いに管理するの約束でただで使わせてもらってる
知り合いはつてで小さい会社のホームページ(静的なページのみ)とメール預かって金作ってるみたい
0777nobodyさん
2007/08/18(土) 17:19:19ID:???・レンタル鯖(月1000円以上)
この2つかなー。片方は仕事だが。
0778nobodyさん
2007/08/19(日) 15:53:31ID:t6VsRWnY@ABCD等の数字を対応出来なくて困ってます。
utf8のままで解決出来るんでしょうか?
0779nobodyさん
2007/08/19(日) 16:42:09ID:???0780nobodyさん
2007/08/19(日) 17:04:05ID:pOFLTECe今でもフォームからの受け取りは CGI.pm 等がデファクトスタンダードでしょうか?
cgi-lib.pl とか古い知識しかないので、CPANなどで最新の方法など御教示ください。
0781nobodyさん
2007/08/19(日) 17:44:44ID:???0785nobodyさん
2007/08/20(月) 11:49:55ID:O2ADjgGzSearch::Namazuを使用して得たNamazuの検索結果(オブジェクトの配列)をダンプしました。
ですが、このダンプしたデータの呼び戻し方がどうしてもわからないです・・。
検索結果(@result)内のデータは例えば以下のとおりです。
$VAR1 = bless( { 'name' => 'hoge', 'score' => '82' }, 'Search::Namazu::Result' );
$VAR2 = ・・・
次のようにすると上記したような文字列としては読み込めますが、できたのはそこまで。
for (@result) { print $_, "\n"; } # => $VAR1 = ・・・
ダンプせず直接書き出す場合は$_->nameでhogeが出力されるんですが・・・
0786785
2007/08/20(月) 11:52:52ID:O2ADjgGz×文字列としては読み込めますが
○文字列としては書き出せますが
0787765
2007/08/20(月) 18:34:36ID:U/5QePTjありがとうございます。また、すみません。
useが使えないというのは勘違いで、@INCに何も入っていないだけでした;
けれど、BEGIN { unshift(@INC, 'hogehoge'); }してもコンパイル時の
モジュール見つかりませんエラーに表示される
@INCの中にはhogehogeは入りませんでした。
スクリプトの中で@INCを(printなどして)参照すると確かにhogehogeは@INCに入っているのですが。。
どうにかしてモジュールを使う方法は無いでしょうか?
0788785
2007/08/21(火) 10:37:32ID:???案外ちょっとしたコーディングのミスだったりしない?
例えばModule名と中のPackage名が違ってて、use Package名にしてるとか・・・
あとは指定したパスが地味に間違ってるとか。
use FindBin qw($Bin);
use lib "$Bin";
とすると@INCの先頭にカレントディレクトリのパスが入るから確認してみては。
例えばuse lib "$Bin/../hogehoge"とすると、相対パスでひとつ上にあるhogehogeが指定される。
>>785で質問させてもらったんですが、解決しました。
Storableでファイルへの保存、呼び出しをしてたのですが、
表示する際にData::Dumperで整形してたのです。(バカな話だけど)
それで当然、もとのオブジェクトとしては扱えなくて。
Storableで戻した配列に対してそのままアクセスしたら復元できましたm(_ _)m
ファイルから呼び出したオブジェクトの配列リファレンス($result)に対して
for my $i (0..$#{$$result}) { printf "%s : %s\n", $$result[$i]->name, $$result[$i]->score; }
みたいな感じで。
というか質問自体がわかりにくかったですね。スマソ
0789nobodyさん
2007/08/22(水) 02:37:38ID:pj3xRAc/どうすればいいのでしょうか?
0791789
2007/08/22(水) 02:44:24ID:???次のページに瞬時でリンクした時、次のページに
データを渡したいのですがどうすればいいのでしょうか。
0793nobodyさん
2007/08/22(水) 10:48:13ID:???0794nobodyさん
2007/08/22(水) 10:50:22ID:???0796nobodyさん
2007/08/22(水) 12:16:22ID:???>>791の2行目の事じゃね?
>>791
「次のページ」が2つ出てきているが、それらは何なのか。またリンク元から見てどこに位置するのか。
「瞬時でリンク」とは何か。
これがわからないと答えようが無い。
0797789
2007/08/22(水) 12:19:59ID:???レスありがとうございました
0798nobodyさん
2007/08/22(水) 22:14:48ID:sWD+Yq++日本語のバイト数拾うのはどうすると良い?
0799nobodyさん
2007/08/22(水) 23:19:26ID:???お望みのコードにencodeしてlengthとるのが正攻法。
perlの内部表現(utf8)のバイト数でよければbytes::length
0800nobodyさん
2007/08/23(木) 00:35:43ID:???0801nobodyさん
2007/08/23(木) 07:54:48ID:uXF+dyLCなるほど。ありがとうございました。
0802nobodyさん
2007/08/23(木) 18:57:09ID:uXF+dyLCうほ!
0803nobodyさん
2007/08/24(金) 18:26:53ID:rvbxrzrr移動平均原価法で原価計算をしたいと思ってます
@COST=(
'2000','3','6000',
'3000','4','12000',
'1000','5','5000',
'4000','3','12000'
);
左から単価、個数、合計という@COSTの配列を作りました
ここからがわかりません。。foreachでまわしてはみたものの、
最初は2行で区切り計算をしてその結果を次の行と計算・・・という流れが作れません
どなたかヒントくださいますでしょうかm(_ _)m
0805nobodyさん
2007/08/24(金) 18:47:18ID:???上の例から行くと
1| (6000+12000)/7=2572
2| 2572*7=18004
3| 1000*5=5000
4| (18004+5000)/12=1917
5| 1917*12=23004
6| 4000*3=12000
7| (23004+12000)/15=2334
という順番に計算していき結果的に2334と出したい状況です。
0806nobodyさん
2007/08/24(金) 19:04:13ID:???0807nobodyさん
2007/08/24(金) 19:09:19ID:???> せめてもっとソースを示して、こうやりたいと書くべき。
坊やはつまんないKENT CGIでも改造してオレすごいぜーとか思いつつ引きこもっておけばいいじゃん。www
人様に迷惑かけんなよ。wwww
0808nobodyさん
2007/08/24(金) 19:18:28ID:???(2000*3+3000*4+1000*5+4000*3)/(3+4+5+3)
わかりやすいような気がするのだが。
各ステップで小数点以下を丸めてわざと誤差を余計に
蓄積させるのが肝??
0809nobodyさん
2007/08/24(金) 19:20:09ID:???use strict;
my @COST = (
['2000','3','6000'],
['3000','4','12000'],
['1000','5','5000'],
['4000','3','12000'],
);
use Data::Dumper;
my ($avarage_cost, $total_pieces, $total_price);
for my $param (@COST) {
my ($unit_cost, $pieces, $price) = @$param;
$total_pieces += $pieces;
$total_price += $price;
$avarage_cost = $total_price / $total_pieces;
print "$avarage_cost\n";
}
0811nobodyさん
2007/08/24(金) 19:26:14ID:???use strict;
use POSIX;
my @COST = (
['2000','3','6000'],
['3000','4','12000'],
['1000','5','5000'],
['4000','3','12000'],
);
my ($avarage_cost, $total_pieces, $total_price);
for my $param (@COST) {
my ($unit_cost, $pieces, $price) = @$param;
$total_pieces += $pieces;
$total_price += $price;
$avarage_cost = $total_price / $total_pieces;
$avarage_cost = ceil($avarage_cost);
$total_price = $total_pieces * $avarage_cost;
print "$avarage_cost\n";
}
0812nobodyさん
2007/08/24(金) 19:35:19ID:???でぐぐれ
0814nobodyさん
2007/08/24(金) 19:44:36ID:???0815nobodyさん
2007/08/24(金) 19:52:53ID:???0816nobodyさん
2007/08/24(金) 20:47:14ID:???馬鹿なのは珍しいな
見物させて貰うよ
0817nobodyさん
2007/08/24(金) 20:50:44ID:???> 馬鹿なのは珍しいな
> 見物させて貰うよ
馬鹿であると認識しつつ見物するというのは何らかの精神障害でもお持ちですか?
■ このスレッドは過去ログ倉庫に格納されています