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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん05/01/27 18:08:42ID:???
Perlのコーディングで困ってる人のスレです。

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

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

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

過去ログやお勧めサイトは >>2-10
0412nobodyさん05/02/14 20:28:06ID:???
>>411は>>407のレス
0413nobodyさん05/02/14 21:34:32ID:azOG+8a2
MCPANについての質問です。 (PC等のプログラムスレにも投稿してしまいました、すみません)

MCPANでImage::Magickモジュールを入れようとしましたが、エラーになってしまいました。
そこで、ついforce installをしてしまいました。その結果か、入っていないにもかかわらず、
MCPANではImage::Magick is up to dateと表示されてしまうようになりました。

現状どおり、Image::Magickが入っていないと表示されるようにするには、どのようにしたら
良いのでしょうか。よろしくお願いします。
0414nobodyさん05/02/15 00:00:01ID:???
>>413
uninstallしろよ。
できなきゃOSから再インストールしろ。
自己責任でforce installなんかやったんだろ。
ついでにスレ違いだ。

Perlモジュールについて
http://pc5.2ch.net/test/read.cgi/php/997829243/
0415nobodyさん05/02/15 08:40:45ID:6J2om7eC
$hoge内の
数字アルファベット以外のすべての文字に
\をつけるにはどうすればいいんでしょうか
$hoge=~s/([^0-9a-zA-Z])/(?:\\)\1/g;
とかやってもうまくいきません
0416nobodyさん05/02/15 08:44:19ID:???
>>415
$hoge=~s/([^0-9a-zA-Z])/\\$1/g;
0417nobodyさん05/02/15 09:38:39ID:???
ハッシュ変数ってリファレンスにしないとルーチンに渡せないのですか?
&hoge(%hash);
こうすればリスト形式で渡りますよね?

sub hoge{
my %hash = (@_);

こうすればハッシュが壊れることはないでしょうか?とりあえずテストは成功しましたが、
私の知らないおかしなことが起こる瞬間があると怖いです。
0418nobodyさん05/02/15 09:55:53ID:???
>>417
my %hash = ...の代入で新しく確保した%hashにコピーされるから
元の方が壊れることはない。
041941705/02/15 09:56:56ID:???
それとこのような方法がダメですと代替方法って何かありますか?
リファレンスにするとルーチンで作らせたハッシュは全てリファレンスになり
出力整形時に
->
が大量に出てくるので嫌なのです;
0420nobodyさん05/02/15 10:25:40ID:???
やじるしで書かない。
042141705/02/15 10:34:23ID:???
>>420
そういうことなのですか?^^;

例えばルーチンが複数のハッシュリファレンスオブジェクトを返してくるとします。
その時に受け取り側でデリファレンスしながら受け取ることっでできませんか?
1個なら
my %hash = %{[&method]};
でいいですが返り血がだと、あ、
my %hash = %{[(&method)[0]]};
my %hash2 = %{[(&method)[1]]};
とすればいいのかな?


0422nobodyさん05/02/15 10:58:14ID:???
$c = $a;
$a = $b;
$b = $c;

$aと$bを入れ替える関数ってなかったでしたっけ?
0423nobodyさん05/02/15 11:42:03ID:???
グローバルな%aとローカルな%aがあった場合にはどちらが優先的に解釈されるのですか?
又、どちらかを意識的に呼び出すにはどうすればいいでしょうか?
0424kobayashi ◆M6R0eWkIpk 05/02/15 12:04:06ID:???
>>422
($a,$b)=($b,$a);
こういう書き方もできますよ。
0425kobayashi ◆M6R0eWkIpk 05/02/15 12:07:04ID:???
>>422
($a,$b)=($b,$a);
こういう書き方もできますよ。
0426nobodyさん05/02/15 12:08:39ID:kdpe8a8e
>>424-425
おー!せんきゅー、ぶらざー
0427nobodyさん05/02/15 12:16:30ID:???
sub test{
my %hash = %{[shift]} ;
}
shiftにはハッシュロファレンスが入ってますが、デリファレンスできないのでしょうか?
0428nobodyさん05/02/15 12:21:04ID:5Ng5Me3b
PHPのrequire_onceみたいな機能はありませんか?
時々コンパイルできなくなってしまうのですが
0429nobodyさん05/02/15 12:21:57ID:???
>>427
>>411
043042705/02/15 12:54:20ID:???
>>429
ありがとうござました。%{(shift)}でやったら何故かできました^^
0431nobodyさん05/02/15 13:27:42ID:???
>>430
それはなぜかではない。%{[shift]}がだめなのは
shiftでとりだした値(たぶんハッシュのリファレンス)
ひとつからなる無名配列を作ってそのリファレンスを
%{}でハッシュとしてデリファレンスするという無理
なことをしているから。

[]とか%{}の意味わbゥってないんじb...
0432nobodyさん05/02/15 13:35:26ID:???
>>428
時々って事は変な薬をやりすぎ
0433nobodyさん05/02/15 14:19:09ID:???
>>423
試せば直ぐにわかることだが、レキシカル変数が優先される。
グローバル変数を参照するにはパッケージ名で修飾すればいいが、
グローバル変数とレキシカル変数に同じ名前をつけるのは奨励できない。

>>428
PerlのrequireはPHPのrequire_onceに相当する。
0434nobodyさん05/02/15 14:48:48ID:dZXRK/qg
[Tue Feb 15 14:41:06 2005] [error] [client 127.0.0.1]
DBI::db=HASH(0x1a51d38)->disconnect invalidates 1 active
statement handle (either destroy statement handles or call
finish on them before disconnecting) at
ファイル名 line 231.\n

こういうエラーがでました。
apacheのエラーログです。
どうやら$dbh->disconnect辺りが問題点らしいですがどういうことなのでしょうか?
一応mysqlにDBIで接続してinsert構文の発行などはできています。
画面上もエラーがでません。

しかし何故かログにはエラーとして残るようです。
どなたかわかる方いませんか?
043543405/02/15 14:50:57ID:dZXRK/qg
失礼しました。
$sth->finishがなかったせいでした。
しかしmysqlには不要なはずなんですがね;
disconnectも本来不要だから使うならfinishもしっかり使えとかいう感じですかね。

とりあえずすみません解決です。
043642805/02/15 15:09:22ID:5Ng5Me3b
>>433
有難うございました
0437nobodyさん05/02/15 19:48:45ID:sBhWNNlk
1: GDで製作した画像を中間ファイルを使わずにImage::Magickへ引き渡したい。
2: my $image = new GD::Image(640, 480);
  $image->Scale(width=>320,height=>240);
  と
  my $image = new GD::Image(640, 480);
  my $image2 = Image::Magick->new;
  $image2->Read($iamge);
3: 500 Internal Server Error

GDで画像を製作し、Image::Magickで縮小などの加工を行いたいと思っています。
(GDで縮小するとアンチエイリアズがかからず汚くなるのと、その他の加工も行いたいので、Image::Magickを使っています)

現在は、GDで製作した画像を中間ファイルに出力した後、Image::Magickで中間ファイルを読み込んでいるのですが、
中間ファイルを使わずに、GDからImage::Magickへ直接画像データを渡すことはできないのでしょうか?
0438nobodyさん05/02/15 19:51:25ID:FRNIfDdj
質問ですが
オフラインでperlで作成したcgiを作成した場合で、cgiにパラメータを引き継がせたい場合
どのように起動すればいいのでしょうか?

./exsampl.cgi?a=abc
0439nobodyさん05/02/15 19:55:38ID:???
>>438
詳しく
0440nobodyさん05/02/15 19:57:05ID:???
>>438
--exsampl.cgi
#!/usr/local/bin/perl
print "$ARGV[0]\n";

$ ./exsampl.cgi aho?

0441T女の竹田05/02/15 21:07:10ID:???
>>438
このへんのことかな?
http://www.att.or.jp/perl/cgi-debug-env/deb-tech.html
QUERY_STRINGがQUERY_STRINGSになってるのは罠なので気をつけて。

WindowsならSET文ね。
SET "QUERY_STRING=item=hoge&item2=moge"
って感じ。
0442T女の竹田05/02/15 21:11:17ID:???
あぁ…マルチポストだった
0443nobodyさん05/02/15 22:05:37ID:???
T女の竹田って、鶴見女子のエリ?
0444nobodyさん05/02/15 22:26:13ID:ilxRQfx7
Perlというよりプログラミングの手法についてですが、質問です。

ある関数内で必要な引数の数が、関数内の処理によって異なる場合、次のような方法はアリですか?

&hoge("2ch");
&hoge(["yahoo", "損", "氏ね"]);

sub hoge {
 my($kind) = shift;

 if($kind eq "2ch"){
  print qq(オマエモナー);

 }elsif($$kind[0] eq "yahoo"){
  print qq(とりあえず$$kind[1]$$kind[2]);
 }
}

きれいに書くにはどう言う方法を取ったら良いのでしょうか。
0445nobodyさん05/02/15 22:34:23ID:???
関数を二つに分けたら?
044644405/02/15 22:44:57ID:???
>>445
その後の処理が殆ど同じなのですが、やはりそれしかないですかね・・・うーん
0447nobodyさん05/02/15 22:49:03ID:???
引数の数によって、処理が変わるって事ではないの?
0448nobodyさん05/02/15 22:57:13ID:???
>>444
引数が複数の時には無名配列にしてる意味はなに?
引数の数で処理を分けるなら、

scalar @_ の数を見ればいいんじゃないの?
044944705/02/15 23:00:54ID:???
&hoge("2ch");
&hoge("yahoo", "損", "氏ね");

sub hoge($;@){
 unless( $_[1] ){
  print "オマエモナー\n";
 }else{
  print "@_\n";
 }
}

じゃ、ダメかい?
0450T女の竹田05/02/15 23:13:38ID:???
>>444
どのくらい共通でどのくらい共通じゃないか、
もうちょっとわかりやすい例にならない?
>>444では共通の処理がないからピンと来ないよ。
045144405/02/15 23:43:31ID:???
一箇所だけ例外処理があって、その例外処理の部分で複数の引数が必要になるんですが、、、
共通の処理の方がかなり多いです。
うーんどんな例を出せば良いんだろう
0452nobodyさん05/02/15 23:48:36ID:???
>>450
ありゃ、あんた中国語板にいなかったっけ?
0453nobodyさん05/02/16 00:30:45ID:???
画像ファイルをアップロードする為に
enctype="multipart/form-data"としているのですが
一緒に文章を受信しようと
cgi-lib.plのReadParseで読んだデータを表示してみると
Content-Disposition: form-data; name="comment"
となっていて、フォームに入力した文字がありません
どうすれば一緒に受信できるのでしょうか?
0454nobodyさん05/02/16 01:29:29ID:???
>>421
正直、リファレンスで参照しろよと言いたいけど
どうしてもいやなら、こんなサブルーチンを作るといい!

sub deref{
for my $hash( @{ $_[1] } ){
%{ $hash } = %{ shift @{ $_[0] } };
}
};

testサブルーチンの戻値がハッシュのリファレンスのリストだとするとこうかける。

deref( [ test() ] => [ \%y1, \%y2, \%y3 ] );

または

deref( [ test() ] => [ \( %y1, %y2, %y3 ) ] );
0455nobodyさん05/02/16 11:54:53ID:MwHh4jT0
現在のページがSSLかどうかを判断することは不可能ですか?
現在のページがSSLかどうかが入ってる環境変数はないのでしょうか?
0456nobodyさん05/02/16 12:59:07ID:???
>>455 $ENV{'HTTPS'}
0457nobodyさん05/02/16 14:03:39ID:???
2つファイルがあって、中身はメールアドレス
そいつを、一行ずつ比較して同じなら削るPerl、、、

すまん、本職絵描きなんで誰か教えてくれ。
0458nobodyさん05/02/16 14:21:03ID:???
my @array = qw/1 2 3/;
この配列の要素それぞれに2を足した数字を表示させたいです。

print map{return $_ + 2}@array;
としてみましたが、何も返されてませんでした;
どうにか変数などには入れず、@arrayの元々の値も変えずにできないでしょうか?
0459nobodyさん05/02/16 14:21:20ID:???
>>457
違う行にある場合は削らないの?
同じ行毎の比較のみ?
で、削るのは2つのファイル両方から削るの?
それとも二つのファイルから重複しないアドレスリストを求めたいわけ?
もちっと詳しく
0460nobodyさん05/02/16 14:21:50ID:???
>>457
if ($a eq $b) { undef $b }
0461nobodyさん05/02/16 14:22:58ID:???
>457
マルチポストうざい。

http://pc5.2ch.net/test/read.cgi/hp/1106947416/177n
0462nobodyさん05/02/16 14:26:26ID:???
>>458
my @array = qw/1 2 3/;
print map{$_ + 2}@array;
print "\n";
print @array;

--result
345
123
046345805/02/16 14:26:45ID:???
returnがいらないだけでした
046446105/02/16 14:35:48ID:???
T-T
046545805/02/16 14:37:22ID:???
>>462
すいません;

これって
$hoge =~ s{}{}e;
これの右ブロックの中で使うにはどうすればいいですか?
$hoge =~ s{^([^\n]*)}{$1.
(join '',map〜).
"終端"
}e;

こんな感じで一応できましたがわざわざjoinしないといけないのがちょっと;
しかし強制的にスカラー評価されるところではこの方法以外にないのでしょうか?
046645805/02/16 14:43:22ID:???
すみませんできましあ。
0467nobodyさん05/02/16 14:54:21ID:???
>>457
その程度ならcomm(1)使え。

0468nobodyさん05/02/16 14:58:35ID:???
>467
マルチ野郎はスルーしる
0469nobodyさん05/02/16 20:09:14ID:???
ディレクトリs1の下にa1とa2を作り
a1にあるXXX.plファイルをa2にあるPPP.cgiから
参照しようとしています。

PPP.cgiの中で
require "../a1/XXX.pl";

とするのは良いのでしょうか?

Copalだとエラーが出てしまいます。
0470nobodyさん05/02/16 20:12:47ID:???
質問です。

$str =~ s/${value}/hoge/g;

をやるときに、$value の値に正規表現の制御文字(^$.[]…等)が
入っていると置換時にエラーとなってしまいます。

$value 内の文字をそのまま扱いたい場合はどのようにすればよいのでしょうか?
置換前に、$value の中の制御文字を全てエスケープするのかなと思いましたが、
他に簡単な方法があればご教授下さい。
0471nobodyさん05/02/16 20:44:55ID:???
>>469
よいでしょう。

>>470
$str =~ s/\Q$value\E/hoge/g;
0472nobodyさん05/02/16 21:02:41ID:???
>>471
ありがとうございます。
すみません、一つ忘れてました。。

$str =~ s/%__${value}\.begin__%(.+?)%__${value}\.end__%/hoge/g;
のような用途を予定しています。

\Q〜\E 内が全てエスケープされてしまうので、
本来使いたい正規表現が無効になってしまいますね…。

やはり変数個々に対してエスケープでしょうか。
047347205/02/16 21:24:45ID:???
自己レスです。

$str =~ s/%__${value}\.begin__%(.+?)%__${value}\.end__%/hoge/g;

を

$str =~ s/\Q%__${value}.begin__%\E(.+?)\Q%__${value}.end__%\E/hoge/g;

にすることで解決できたようです。(ホントに大丈夫かな…)
ありがとうございました。
0474nobodyさん05/02/16 22:15:30ID:???
事前に $pattern =quotemeta $value; しちゃダメ?
047546905/02/16 22:41:10ID:???
>>472
ありがとうございます。
端末の設定をもう一度見直して見ます。
0476nobodyさん05/02/17 00:24:07ID:???
正規表現でよくでてくる =~ はどういう意味ですか?
0477nobodyさん05/02/17 00:58:33ID:???
パターン結合演算子がなぜ = と ~ の2文字の組み合わせなのかを知りたいのか?
0478nobodyさん05/02/17 06:25:30ID:???
>>476
左項に対して右項でパターンマッチを行う演算子。
0479nobodyさん05/02/17 09:24:23ID:???
$hoge = "hoge1,hoge1,hoge1,\n";
@array = split(/,/,$hoge);
$array[1] = "hoge2";
$hoge = join(",",@array);

カンマで区切られた$hogeの指定個所を変更したいのですが、
今は上記のように、分割→変更→結合と3行に渡って行っています。
これをもっと効率の良い方法でやる事はできますでしょうか?
0480nobodyさん05/02/17 10:40:36ID:ICaDRbeT
改行をprintで出力するにはどうすればいいですか?
print "hoge\nhoge";
とやると、
hoge\nhoge
とそのまま表示されてしまうんですが、なにか間違いがあるんでしょうか。
0481nobodyさん05/02/17 10:48:59ID:???
>>480
エスケープする
print "hoge\n\hoge";
0482nobodyさん05/02/17 11:31:00ID:???
>>480
ネタだろ?
0483nobodyさん05/02/17 12:28:14ID:???
>>480
print "hoge<br>hoge";
0484nobodyさん05/02/17 12:29:02ID:???
print "hoge<br></br>hoge";
0485nobodyさん05/02/17 13:43:38ID:???
>>479
この処理だけ100万回やるので全体の処理時間がここで決まるとかじゃなければ
あまり気にしてもしょうがないと思うが、

use Benchmark;

timethese(undef, {
SPLIT_JOIN => sub {
my $hoge = "hoge1,hoge1,hoge1,\n";
my @array = split(/,/,$hoge);
$array[1] = "hoge2";
$hoge = join(",",@array);
},
SUBSTITUTE => sub {
my $hoge = "hoge1,hoge1,hoge1,\n";
$hoge =~ s/,[^,]*/,hoge2/;
},
INDEX_SUBSTR => sub {
my $hoge = "hoge1,hoge1,hoge1,\n";
my $pos1 = index($hoge, ',')+1;
my $pos2 = index($hoge, ',', $pos1);
substr($hoge, $pos1, $pos2-$pos1) = 'hoge2';
},
});

Benchmark: running INDEX_SUBSTR, SPLIT_JOIN, SUBSTITUTE for at least 3 CPU seconds...
INDEX_SUBSTR: 3 wallclock secs ( 3.14 usr + 0.00 sys = 3.14 CPU) @ 222680.89/s (n=699218)
SPLIT_JOIN: 4 wallclock secs ( 3.12 usr + 0.00 sys = 3.12 CPU) @ 108552.56/s (n=338684)
SUBSTITUTE: 3 wallclock secs ( 3.19 usr + 0.00 sys = 3.19 CPU) @ 188749.53/s (n=602111)

0486nobodyさん05/02/17 14:31:44ID:???
>>485
ベンチマークまでありがとうです。
hoge2が計算式だったり、要素数が多かったりする事も考慮すると、
見易さの面(個々によると思いますが)でも、今まで通りでOKみたいですね。

(空想の関数/,/,$hoge)[99] = $age + $sage;
みたいな感じで$hogeをカンマで区切った場合、
要素100番目の位置にダイレクトに代入できる技が無いものかと思いまして。
0487nobodyさん05/02/17 16:18:01ID:lgJIuLRQ
my %a = (a=>1,b=>2,c=>3);
print $a{a,b,c};

こういう感じでハッシュも配列みたいにいっぺんに呼べるカナと思いましたが、
エラーでした;
@a{a,b,c}や%a{a,b,c}もやりましたがダメでした。

ハッシュって
print $a{a},$a{b},$a{c};
のようにいちいち一つずつでしかできないのでしょうか?
0488nobodyさん05/02/17 16:33:32ID:???
スライスとか

@a{'a', 'b', 'c'}
0489nobodyさん05/02/17 16:36:41ID:???
@{[%hash]}
使い道ないかもしんないけどこういうのも
049048705/02/17 16:43:51ID:lgJIuLRQ
>>488-489
クォートでしたか。
@a{qw/a b c/};
こんな感じですね^^
0491nobodyさん05/02/17 16:56:59ID:???
>>487
strict subsしているときは、サブルーチンとして
宣言されていない裸のワードの存在が許されるのは
「{}」の間に単独で存在するときと、「=>」の左側
だけ。

Bareword "a" not allowed while "strict subs" in use at ほげほげ

って感じのエラー出てたはずだからちゃんとよめよ...

エラーメッセージの意味わかんない人は、ラクダ本の
診断メッセージって章にアルファベット順に意味と並
べて書いてあるので調べる癖をつけましょう。
0492nobodyさん05/02/17 18:15:10ID:???
Windows2000
Apache 2.0.52
perl ActivePerl 5.8.6.811

クライアントの要求のヘッダを取得したいのですが出来るものでしょうか?
WEB サーバーからのヘッダは取得は出来たのですが、今やりたい内容ではないですし …

ご教授よろしくお願いします。
0493nobodyさん05/02/17 20:37:53ID:???
>>492
前に HTTP_ をつけて環境変数 %ENV にはいるよ
0494nobodyさん05/02/18 01:51:05ID:???
>>486
そうであればこんな正規表現があるけど

$hoge = "hoge1,hoge1,hoge1,\n";
$hoge =~ s/((?:[^,]*,){1})[^,]*/$1hoge2/;

これで前から2番目の「hoge1」が「hoge2」に置き換わる。
{1} の部分を
{0} とすれば先頭の「hoge1」が「hoge2」に置き換わるし
{2} とすれば前から3番目の「hoge1」が「hoge2」に置き換わる。
{3} とすれば最後のカンマの後ろに「hoge2」が追加(改行が置き換わる)されるし
4以上の数字を指定すと置換えは行われない。

カンマの数が増えれば置き換え対象の指定位置も増える。
0495nobodyさん05/02/18 01:54:39ID:???
>>494の続き

(空想の関数/,/,$hoge)[99] = $age + $sage;

みたいにしたければ

$hoge =~ s/((?:[^,]*,){99})[^,]*/$1.($age + $sage)/e;

ってやればよい。
0496キヨ05/02/18 04:51:35ID:wywZhzNy
回答者の皆さまはじめまして。
�@:やりたい事
データがカンマ区切り","されていない形式で、
データをソートして表示したい

4 平野 298 3
3 辻 286 5
2 秋山 325 26
1 清原 304 38

�A:やってみた事
各項目別にソートしたいのですが、

@mem = sort { (split(/\,/,$a))[0] <=> (split(/\,/,$b))[0] } @mem;
foreach $mem (@mem) {
($no,$name,$avr,$hr) = split(/\t/, $line);
(各処理)
}
現在、$noに関してソートして表示できています。
上記の[0]の部分を[2]に変更すると、$avr項目に関してソートできると思ったのですが
うまくいきません。
データの拡張子は.logですが、excelで開くと綺麗に並んで表示されます。
","で区切られていないと上記の処理は出来ませんか?
それとも、","の区切りは関係なく、別の問題なのでしょうか?
0497nobodyさん05/02/18 05:26:56ID:qmmO8oMV
Perlでフリーソフトを作ってます。
モジュールに頼らずに入力されたパスフレーズをSHA1かけてファイルに保存しようと思ってます。
再配布可能でSHA1ハッシュ値を計算するサブルーチンをwebで検索したところ
ttp://www.mirrors.wiretapped.net/security/cryptography/algorithms/rc4/arcfour.pl
こちらでsha1サブルーチンがあったので、ちょっとここのサブルーチンを拝借して
$string = "ax";
print sha1($string);
という風にテストしてみたところSHA1ハッシュ値とは全然違う文字列が出力されました。
どのようにすればちゃんとしたSHA1ハッシュ値が得らるのでしょうか?
0498nobodyさん05/02/18 05:36:15ID:???
>>496
「データがカンマ区切り","されていない形式で」っていっているんだから
sort の中の split で","分割しちゃだめでしょ。
0499キヨ@49605/02/18 06:50:20ID:wywZhzNy
>>498
有り難うございます!
splitの\,を\tに変えたら作動しました!!
5〜6時間近く悩んでいたのに…。
本当にありがとう御座いました!!
050048605/02/18 08:42:07ID:4JcRNkuB
>>494-495
親切な人ありがとー
一行でやるには関数では無くて、正規表現でやる事になるのですね。
勉強になりました。
0501nobodyさん05/02/18 09:39:28ID:???
DBI周辺質問
SELECT * FROM TEST_TABLE;
これで全レコードのゼンフィールドを取得したとして。
@arrayの中に全レコードのhogeフィールドだけをデリファレンスして入れたい。
hogeフィールドは0番目だと仮定。

fetchall_arrayrefで返されるのが配列リファレンス。更に中に配列リファレンスなので

my @array = @{@{$sth->fetchall_arrayref}[0..$#{$sth->fetchall_arrayref}]}[0];

とかでいけるかと思いきやダメでしたorz
誰かわかる方いますか?
0502nobodyさん05/02/18 09:48:08ID:???
ろくに読まないでレス。

my $rows = $sth->fetchall_arrayref;
my @array = map { $_->[0] } @$rows;
050350105/02/18 10:21:48ID:???
>>502
ありがとうございます。
変数作るの機雷なんで
my @array = map { $_->[0] } @{$sth->fetchall_arrayref};
としておきました。

もう一つお願いします。
sprintfで
$str = sprintf %d+100.%d-20.%d,@list;

こういう風に配列の中身にそれぞれ別の数字を足したり、文字列を付加したりしながらの
整形って不可能ですか?上記ではエラーでしたが;

やりたいことは
$str = $list[0]+100.$list[1]-20.$list[2];
です
0504nobodyさん05/02/18 10:39:33ID:???
truncate関数ってflockと同じくらいプラットフォームによって使えるかが左右される関数ってほんと?
050550405/02/18 10:47:26ID:dVwgIF/D
上げ忘れた。
truncate関数がダメならそれ以外で
open FH,"+<test.txt";
flock FH,2;
この状態のファイルの中身を一旦0にすることはできますか?

ファイルを上書きモ−ドで開くのは不可能です。このファイルを開いてる間に
処理内容が重複しては困ることをしてるので。
050650405/02/18 11:31:10ID:dVwgIF/D
あれ・・・誰もいないのかな・・・
0507nobodyさん05/02/18 11:45:10ID:???
>>504
そんな話聞いたことが無いけど釣りですか
050850405/02/18 12:14:53ID:dVwgIF/D
>>507
失敬な!
http://perl.misty.ne.jp/function02/truncate.html
http://www.7key.jp/program/perl/truncate.html
0509nobodyさん05/02/18 12:16:49ID:???
--- original.pl ---
require './lib/lib1.pl';

--- lib1.pl ---
require './lib/lib2.pl';
open( FILE, "< file.txt" );

というファイル/ソースの時に、
original.pl を実行すると、
どこの file.txt, lib2.pl を読むのでしょうか?

この辺の位置関係を解説してるサイトがあれば
すみませんが教えてもらえると助かります。
0510nobodyさん05/02/18 12:24:30ID:???
俺Perl書けないけど試せば答えられそうだな
0511nobodyさん05/02/18 12:26:03ID:???
>>510
お前なんでここにいんの?
■ このスレッドは過去ログ倉庫に格納されています