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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2005/05/25(水) 06:36:28ID:PVpWgcdf
Perlのコーディングで困ってる人のスレです。

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

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

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

過去ログやお勧めサイトは >>2-10
0166nobodyさん2005/06/01(水) 12:26:27ID:???
>>165
ぐぐり方が悪すぎるんじゃ...

Exporterとperlをキーワードにして日本語のページを検索すると
普通に出てきますが...
0167nobodyさん2005/06/01(水) 21:46:59ID:???
>>163
Exporterはモジュールのシンボル(通常はサブルーチン)を呼び出し元に輸出するためのモジュール。
DynaLoaderはCなどで書かれた外部サブルーチン(XS)をロードするモジュール。
詳しいことはぐぐるなりマニュアル読むなりせよ。

オブジェクト指向でPurePerlなモジュールを書く分にはどちらも無関係。
0168nobodyさん2005/06/01(水) 23:13:36ID:4wa3Dv1b
すみません。sendmailを使ってメールを送る際に
ファイルを添付することは出来ませんか?
0169nobodyさん2005/06/01(水) 23:38:04ID:???
>>168
できる。でもsendmailそのまま使ってあとは自分で作るのはお勧めしない。
search.cpan.orgでmailとかMIMEとかキーワードに検索するといろいろでて
くるのでなるべく利用するのが吉かと。
0170nobodyさん2005/06/02(木) 07:19:19ID:???
>>167 "PurePerl" って何?
その言い方から予想するとプラグマ以外の他のモジュール使わないで単独で動くモジュールってことかな。
0171nobodyさん2005/06/02(木) 07:21:43ID:???
DynaLoaderはXS専用じゃないよな。
0172nobodyさん2005/06/02(木) 12:06:12ID:???
>>170
PurePerlってのは他の言語で書いたライブラリに依存せず、Perlのみで書かれたコードのこと。
どんなモジュールを使っているかは関係ない。
標準ライブラリだと、CGI.pmはPurePerlで、POSIX.pmはPurePerlじゃない。
といってもそんな厳密なものではなく、例えばData::Dumperなんかはコンパイル済みライブラリがあれば
その(速い)ルーチン、無ければPurePerlルーチンを自動的に選択して使用する。
非PurePerlモジュールに依存したPurePerlモジュールをPurePerlというか否かも意見の分かれ目だな。

>>171
まあXSインターフェイスを使わなくてもDynaLoaderを使うことはあるわな。
ここでは単に「外部サブルーチン」という意味でXSとした。
0173nobodyさん2005/06/02(木) 17:34:11ID:???
>>172 おおなるほど!(゜∀゜) 勉強になったよありがとう!
0174nobodyさん2005/06/02(木) 18:02:31ID:???
my ($i, $j) = (0, 0);
foreach (1 .. 10) { $i++; } continue { $j++; }
print " ($i , $j) \n";

こういうコードを実行すると、結果が (10 , 10) ってなるんだけど、これはいいの?w
(10 , 9) ってなってほしかったんだけど・・・ orz
0175nobodyさん2005/06/02(木) 19:32:12ID:???
>>174
どこからどう考えても (10,10) なのだが・・・。

foreach節の最後に last until $i < 10; とでも付け加えれば
最後の continue は実行されないが。
0176nobodyさん2005/06/02(木) 19:41:55ID:???
>>174
ラクダ3版の「4.4.3 foreachループ」の最後のあたりに
はっきりこのように書いてある。

while文と同様に、foreach文もcontinueブロックを持つことが
できる。continueブロックは、ループが普通に実行された場合
でも、nextが実行された場合でも、ループの各繰り返しの最後
に必ず実行される。
0177nobodyさん2005/06/02(木) 20:09:01ID:QYKowdcj
if(-e $saitama){
print $saitama;
}

すいません↑これって何をしてるんですか?
-eで$saitamaが存在しているのかどうかを調べているんでしょうか
0178nobodyさん2005/06/02(木) 20:12:30ID:???
> -eで$saitamaが存在しているのかどうかを調べているんでしょうか

正解。
0179nobodyさん2005/06/02(木) 20:15:16ID:QYKowdcj
ありがとうございました
0180nobodyさん2005/06/02(木) 20:40:27ID:???
my %d;
$text =~ s/\A([^\n]*)\n//s;
$d{title} = $1;

こんなのが出てきたんですけど、$1は、「上の正規表現『s/\A([^\n]*)\n//s』で一番最初にマッチングしたもの」であってますか?
0181nobodyさん2005/06/02(木) 21:05:27ID:???
>>180
一番最初の括弧の中にマッチしたもの。
0182nobodyさん2005/06/02(木) 21:38:25ID:U6HelXRG
すいません。教えて下さい。

名前 住所 電話
A氏 東京 1111111111
B氏 大阪 2222222222
C氏 愛知 3333333333
D氏 広島 4444444444

上記のようなデータファイルがあって、B氏だけの内容を変更したい時、
ファイルを出力用 ">" で開いて再度1レコードずつ書き込めばできる
のですが、出力用で開くと一旦データが全て消えて危険性が高いので、
入出力両用 "+<" 等で開き、他のレコードは保持したまま、B氏のレ
コードだけを書き換えるようなことは出来るのでしょうか?
0183nobodyさん2005/06/02(木) 21:45:15ID:???
レコードのサイズを固定長にする。
0184nobodyさん2005/06/02(木) 21:55:58ID:???
別ファイルに書いて、成功したらばrename
0185nobodyさん2005/06/02(木) 22:00:22ID:U6HelXRG
>>183
他にも項目があって固定長には出来ないのですが、固定長にすると
対象レコードのみ書き換えられるのでしょうか?
>>184
成功したかどうかはどう判断すれば良いでしょうか?
0186nobodyさん2005/06/02(木) 22:19:38ID:???
>>185
エラーが発生せずに、書き込み、クローズが完了したら成功。
もっと気にするなら、読み込んでベリファイ。
0187nobodyさん2005/06/02(木) 22:22:01ID:???
if (変更前のファイルサイズ - 変更前の変更行のサイズ == 変更後のファイルサイズ - 変更後の変更行のサイズ) { rename 〜 } とかな。
他にも方法はいくらもあるけど、上のもそうだがいちいち聞くな、自分で考えろと。
0188nobodyさん2005/06/03(金) 06:02:35ID:???
mod_rewriteをつかって
http://www.hoge.com/aaa/bbb/ccc.html へのアクセスが
http://www.hoge.com/index.cgi?aaa/bbb/ccc.html となるように書き換えをさせています。
RewriteRuleは→ ^(.*)$ index.cgi?$1 [L,QSA] こんな感じで。

で、http://www.hoge.com/aaa/bbb/ccc.html?ddd にHTMLフォームからPOSTで適当なクエリを送って、
そいつを取得したいのですが、
QUERY_STRING には aaa/bbb/ccc.html&ddd が入っているものの、
フォームからポストしたクエリが標準入力に来ていないっぽいのです。
フォームからポストするクエリの量を変えてやると CONTENT_LENGTH の値が変わるので、
全く送られていないわけではないみたいなのですが…
いったいどこに行ってしまったのか心当たりはありませんでしょうか?
01891882005/06/03(金) 07:13:27ID:???
自己レス
なんか全然別のつまらないところでミスっていただけでした……
板汚しすみません……
0190nobodyさん2005/06/03(金) 09:54:19ID:lSpNwut+
超初心者でもわかるPHPの書籍探してるんですが、できれば、教えて頂きたいのですがよろしいでしょうか?
0191nobodyさん2005/06/03(金) 10:01:33ID:???
だめに決まってるでしょ。
0192nobodyさん2005/06/03(金) 10:02:31ID:???
PHPのスレが別にあるから、そっちで聞きなさい
0193nobodyさん2005/06/03(金) 16:31:13ID:p0YkzVQc
sub lengthw {
local $_ = shift;
-(tr/\x00-\x7f//)+2*length
}

↑これはどんなことをしてるんでしょうか
lengthwは
if((lengthw $x) < 50){} のような使い方をしているみたいですが

どなたか分かる方がおりましたら解説希望です。
0194nobodyさん2005/06/03(金) 17:23:46ID:???
if ( (文字列 $x のバイト数 x 2) - ($x の中のアスキー文字の数) > 50 ) { }
なにがしたいのかはよくわからん。
0195nobodyさん2005/06/03(金) 17:24:10ID:???
不等号逆だー orz
0196nobodyさん2005/06/03(金) 18:09:23ID:???
>>194
$_がunicode文字列でbytesプラグマの影響範囲内でなければ
lengthはバイト数じゃなくて文字数だな。

もしそうならアスキーの範囲は1,それ以外は2で文字幅を
数えてるような気がする。

条件が示されてないのでなんともいえんが。
01971932005/06/03(金) 18:27:26ID:p0YkzVQc
>>194-196
お答えありがとうございました!

というか

local $_ = shift;#←これがよく分かってないんです。
-(tr/\x00-\x7f//)+2*length #←これは_$が略されてるのは想像つくんですが。。

0198nobodyさん2005/06/03(金) 18:45:47ID:???
>>196
結局見てみないとわからんねw

>>197
local $_ = shift;
↓=
local $_ = shift @_;
OK?
01991932005/06/03(金) 18:52:05ID:p0YkzVQc
うはー「@_」が略されてたんですね。
わけ分かりませんでした。ありがとうございました!

ちなみにbytesプラグマの影響範囲内ではありません。
0200nobodyさん2005/06/03(金) 18:56:41ID:???
perlって略すような書き方が多いから、解析するのに苦労するよね。
use Time::Local
とか意味分かんないし
0201nobodyさん2005/06/03(金) 18:58:28ID:???
use Time::Local のどこが意味分かんないの?
0202nobodyさん2005/06/03(金) 19:12:25ID:???
use Time::Local って「Timeと言うクラスのLocalって関数を使えるようにしますよ」って意味でいいのかな?
0203nobodyさん2005/06/03(金) 19:23:19ID:???
うーむ、略すような書き方とか解析するとか以前に、
それは単に君が勉強が足りてないだけのような気が。
0204nobodyさん2005/06/03(金) 19:47:19ID:???
use Time::Local;
↓=
BEGIN {
    require 'Time::Local.pm';
    import Time::Local;
}
アンダースタンンドゥッ!?
0205nobodyさん2005/06/03(金) 19:59:28ID:???
BEGINって何ですか?
0206nobodyさん2005/06/03(金) 20:25:00ID:???
>>204
http://perldoc.jp/docs/perl/5.6.1/perlfunc.pod#item_require_VERSION

>>205
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlmod.html#Package_Constructors_and_Destruc
0207nobodyさん2005/06/03(金) 21:08:38ID:???
Time::Localでどんなことが出来るようになるの?
0208nobodyさん2005/06/03(金) 21:17:01ID:???
それぐらいぐぐれ。調べれば分かることを聞くスレじゃない。
0209nobodyさん2005/06/03(金) 21:21:50ID:???
>>207
http://search.cpan.org/~drolsky/Time-Local-1.11/lib/Time/Local.pm

>>208
Perl に関してはググるより前に perldoc れ or CPAN れが必要な気がする。
0210nobodyさん2005/06/03(金) 21:26:58ID:???
ぱーるどくれ!しーぱんれ!
0211nobodyさん2005/06/03(金) 21:27:04ID:???
>>209
「れ」が余計です。
0212nobodyさん2005/06/03(金) 21:38:29ID:p0YkzVQc
$a = $x if ($x !~ /[$kw]$/ or $rest !~ /^[$kw]/) and ($rest !~ /^[$kt]/ and $x =~ /[$kk]$/)
こんなのが出てきましたけど、私にはチンプンカンプンです。
これだけで申し訳ないのですが、↑が分かる人がいましたら、解説願います。
0213nobodyさん2005/06/03(金) 21:44:52ID:???
おいおい、片っ端から質問していくつもりかよ・・・?
0214nobodyさん2005/06/03(金) 23:02:32ID:???
>>212
>>7
0215nobodyさん2005/06/04(土) 14:08:36ID:???
>>211
ググ「れ」のもじりだからおk
0216nobodyさん2005/06/04(土) 19:40:24ID:???
>>215
言語感覚が滅茶苦茶だな。
0217nobodyさん2005/06/04(土) 22:52:44ID:???
( ゚Д゚)…
0218nobodyさん2005/06/04(土) 23:48:24ID:???
ファイルサイズの単位をバイトからメガバイトにして小数点第三位以下を切捨てするにはどうすればよいですか?

たとえば12345678を11.77にしたいです。
0219nobodyさん2005/06/04(土) 23:55:29ID:???
my $chinko = 12345678;
my $manko = 100;

print int($chinko / (1024 * 1024) * $manko) / $manko;
0220nobodyさん2005/06/05(日) 00:02:38ID:???
ありがとう!
0221nobodyさん2005/06/05(日) 00:43:39ID:???
printf "%.2f",12345678/1024/1024;
0222nobodyさん2005/06/05(日) 04:55:26ID:???
それ切り捨てじゃないし
0223nobodyさん2005/06/05(日) 13:21:23ID:???
変数名なんとかしろよw
0224nobodyさん2005/06/05(日) 15:28:16ID:???
質問があります。
↓のような場合で、

for($i=0;$i<=10;$i++){
$po[$i] .= int(rand(6));
}

これはあくまで例なのですが、似たような場合などでも、
randで選ばれる数字が同じものが続けて入ってしまう事が良くあるのですが、
これをもっとばらけさせたいのですが、何か方法があるのでしょうか?
上手く説明できずにすみませんが何卒よろしくお願いします。
0225nobodyさん2005/06/05(日) 16:27:58ID:???
>>224
0〜5までの数字から完全にランダムに選んだ場合、
直前と同じ数字になる確率は1/6もあるわけで、
10回も続けてやれば一度でも同じになる確率は
8割以上だからまあ当たり前だろうな...

同じ数字が続くのがいやならひとつ前の数字を
保存して同じ数字にならないように細工すりゃ
いいんじゃねーの。

お手軽コース:
同じ数字の間はやり直す

少し考えたコース:
0〜4までの乱数を求めて、前の数字と等しいか
大きければ1を加える。

0226nobodyさん2005/06/05(日) 16:42:19ID:???
>>224
コード書いてみたがね。
同じ数字が並びそうなら振りなおすなも。

my @numbers;
my $last = $num = -1;
for(my $i = 0; $i <= 10; $i++){
$num = int(rand(6)) while($last == $num);
$numbers[$i] = $last = $num;
}
print @numbers;

# 11回振ってるようだが、いいんきゃーも?
0227nobodyさん2005/06/05(日) 18:10:57ID:???
WindowsのMySQL+DBIの使い方で困ってます。詳しい方、教えてくれないでしょうか。

下のテーブルをセレクトしたいだけなんですが、mysqlのコマンド上ではちゃんと表示される日本語がPerlで出力させるとクエスチョンマークで表示されてしまいます。

↓こういう風に表示させたい。
>2005-06-05 17:27:47<>0<>ニュースタイトル!<
>2005-06-05 17:27:48<>0<>news title!<

↓こういう風になってしまう。
>2005-06-05 17:27:47<>0<>?????????<
>2005-06-05 17:27:48<>0<>news title!<

どうやったら日本語を出力できるんでしょうか。どなたかご教授お願いします。m(__)m

◆ソース(perl v5.8.6)
$dbh = DBI->connect("DBI:mysql:$dbname", $dbuser, $dbpass, {PrintError => 0, RaiseError => 0, AutoCommit => 0});
$datasp = $dbh->selectall_arrayref(q{
SELECT * FROM NEWS
});
for($n = 0; $n < scalar(@$datasp); $n++){
printf(">%s<>%s<>%s<\n",$datasp->[$n][0], $datasp->[$n][1], $datasp->[$n][2]);
}
0228nobodyさん2005/06/05(日) 18:11:25ID:???
上の続き・・・

◆テーブル
| NEWS_DATE       | NEWS_IMPORTANCE | NEWS_TITLE     |
| 2005-06-05 17:27:47 |                 0 | ニュースタイトル! |
| 2005-06-05 17:27:48 |                 0 | news title!      |

◆DBステータス
mysql Ver 14.7 Distrib 4.1.12a, for Win32 (ia32)
Connection id: 1
Current database: testdb
Current user: root@localhost
SSL: Not in use
Using delimiter: ;
Server version: 4.1.12a-nt
Protocol version: 10
Connection: localhost via TCP/IP
Server characterset: sjis
Db characterset: sjis
Client characterset: sjis
Conn. characterset: sjis
0229nobodyさんNGNG
前回と同じ値だからといって再度乱数を発生させると、ループがかさばる可能性もあるですよ。

my @dice_seed = (1..6);
my @dice_rand;
for(reverse (0..$#dice)){
push @dice_rand, splice @dice_seed, rand $_, 1;
}
みたいな。。。
0230nobodyさん2005/06/05(日) 19:24:15ID:???
>>227
たぶんこれ。オレも以前はまった。

ttp://www.mysql.gr.jp/frame/modules/bwiki/?FAQ
の「mysql コマンドでは大丈夫なのに、PHP,perl,accessなどで文字が ? に化けるのは? 」
02312272005/06/05(日) 20:35:05ID:???
>>230
ログイン直後に SET NAMES sjis を追加したらできました!
ありがとう!!!
もう、perlあきらめてphpで開発しようかと思ってたら
phpでも同じだったんですね・・・

◆ソース(変更後)
$dbh = DBI->connect("DBI:mysql:$dbname", $dbuser, $dbpass, {PrintError => 0, RaiseError => 0, AutoCommit => 0});
$dbh->do('SET NAMES sjis');    # ←追加
$datasp = $dbh->selectall_arrayref(q{
SELECT * FROM NEWS
});
for($n = 0; $n < scalar(@$datasp); $n++){
printf(">%s<>%s<>%s<\n",$datasp->[$n][0], $datasp->[$n][1], $datasp->[$n][2]);
}
0232 ◆5KhTfX3Q0E 2005/06/05(日) 23:16:56ID:???
はじめまして、よろしくお願いします。

1: HTMLを取得して例えば
<A href="http://www.**.co.jp/~sample/image/a.jpg">
<A href="image/a.jpg">
<A href=http://www.**.co.jp/~sample/image/a.jpg>
<A href=image/a.jpg>
とあるものをすべて
<A href="http://www.**.co.jp/~sample/image/a.jpg">
に統一したい。
2:
$url = $ENV{'QUERY_STRING'};
$url =~ s/$0//gi;
$surl = $url;
if($surl !~ /\/$/){$surl =~s/(.*)\/.*/$1\//i;}
use LWP::Simple;
$html = get $url;
&jcode'convert(*html,'sjis');
#携帯で見れるようにしたいのでテーブル等不要と思われるものを削除
#出来ればここも1行に統一できればうれしいです
$html =~ s/<(?:TABLE|TD|TR|TH|script|TBODY|font|B|U|I|center|form|dl|dt).*?>//gi;
$html =~ s/<\/(?:TABLE|TD|TR|TH|script|TBODY|font|B|U|I|center|form|dl|dt).*?>//gi;

3: 相対パスと絶対パスの相互の方法がまったく思い浮かばずにいます

これぐらいでよろしいのでしょうか。よろしくお願いいたします。
0233nobodyさん2005/06/06(月) 01:24:14ID:???
>232
>これぐらいでよろしいのでしょうか。
もう少しやりたいことと何が問題なのかを整理して書いてくれ。
1と3って同じことだと思っていいのか?
とりあえず hoge/./ を取り除いたりまではしてない。

my $server = 'http://www.example.com'; # サーバのところまで
my $base = 'http://www.example.com/~sample/'; # 相対パス起点

sub absolute($)
{
my $str = shift;
$str =~ s/^"//;
$str =~ s/"$//;
if($str =~ m,^/,) {
return qq("$server$str");
} elsif($str =~ m,^http://,) {
return qq("$str");
} else {
return qq("$base$str");
}
}

$target =~ s,(<A[^>]*\s+href=)("[^"]*"|\S*)([^>]*>),$1.absolute($2).$3,eigm;

2: まとめればいいんだな?
$html =~ s/<\/?(?:TABLE|TD|TR|TH|script|TBODY|font|B|U|I|center|form|dl|dt).*?>//gi;
個人的には
$html =~ s,</?(?:TABLE|TD|TR|TH|script|TBODY|font|B|U|I|center|form|dl|dt)[^>]*>,,gi;
の方が好きだな。
0234nobodyさん2005/06/06(月) 01:26:42ID:???
>233
$target =~ は $html =~ だと思ってくれ。
0235nobodyさん2005/06/06(月) 01:31:08ID:???
>232
度々申し訳ない。>>1 のテンプレ?に合わせようとしてたんだな。
でもやっぱり何が問題なのか、どこがポイントなのかを整理して欲しいとは思う。
0236nobodyさん2005/06/06(月) 14:15:56ID:nLjgLi0T
質問させてください。
flockを使わずにflockと同じ動作する方法って、ありますか?
0237nobodyさん2005/06/06(月) 14:29:00ID:???
そうさなあ。あれは何年前のことじゃったか…。
0238nobodyさん2005/06/06(月) 15:25:52ID:???
なにもかも、懐かしい思い出じゃった…
0239nobodyさん2005/06/06(月) 15:44:24ID:???
>>236
【Perl】ファイルロック(排他処理)について語ろう
http://pc8.2ch.net/test/read.cgi/php/1024795138/
0240nobodyさん2005/06/06(月) 23:17:43ID:???
本当になつかしい
0241nobodyさん2005/06/06(月) 23:52:50ID:7fi2eBpp
実行ボタンクリックすると、フォーム内のデータをファイルに書き込むと言う
多分超簡単なものを作ってます。

ファイルをオープン後
$buff=<DAT>;
@buff=<DAT>;
としました。
これは、データの1行目と全てのデータを表示させたかったからなのですが
どうやら上記のように書くと@buffには、$buffを除いたものしか入ってこないようです。

簡単に、データの1行目、1行目を含む全データを格納したいのですが
どうしたらいいでしょうか。
0242nobodyさん2005/06/06(月) 23:58:16ID:???
@buff=<DAT>;
$buff=$buff[0];
02432412005/06/07(火) 00:07:20ID:???
>>242
なるへそ…出来ました!
アザース!!!
0244 ◆5KhTfX3Q0E 2005/06/07(火) 00:12:36ID:???
>>233
できました、ありがとうございます
整理できていなくてすいませんでした
いまさらですが整理というか用途を書きますと

携帯からこのcgiにアクセスし、
****.cgi?http://www.abc.*.jp/
と言う形でみたいページのアドレスを指定します
指定されたアドレスをcgiで取得し、テーブルなどの携帯では不要なタグを切り捨てます
次に、アンカー?<A〜タグにあるhrefにこのcgiをかえすように、
href=****.cgi?リンク先
と言うようにかえたいので、hrefのぶぶは絶対パスに統一する必要があるのですがこの方法が分からずにいました
あともう一つ間違えてたら分かればでいいので教えていただきたいのですが、
>>232のソース+>>233パスを統一するソースのみのソースで何故かbodyタグまで消されるのですが、理由分かりますでしょうか
0245nobodyさん2005/06/07(火) 09:57:36ID:???
正規表現の中に |B| があるから Bで始まるものタグが消されてるんじゃね?
Blockquote とか UL とかも消されてるはず。
もうちょっと正規表現考えた方が良かったね。 プ
0246 ◆5KhTfX3Q0E 2005/06/07(火) 10:46:09ID:???
>>245
たしかに…
気づきませんでした
ありがとうございます
0247nobodyさん2005/06/07(火) 12:03:54ID:???
質問です。
↓これだけの文章だと、"newdir"というフォルダがなければ、作るまで永遠に繰り返すってことになりますかね?
while (!mkdir("newdir", 0755)) {
  
}
0248nobodyさん2005/06/07(火) 12:32:22ID:???
サーバークラッシュさせたいってこと?
0249nobodyさん2005/06/07(火) 14:54:20ID:???
↓こうやらないと、フォルダが作られたら、ループが終わっちゃうんでは?

while (!mkdir("newdir", 0755)) {
 rmdir("newdir"); 
}
0250nobodyさん2005/06/07(火) 15:29:22ID:???
>>249
「作るまで永遠に繰り返す」だから作ったら終わっていいんじゃない?
0251nobodyさん2005/06/07(火) 16:38:25ID:???
>>247-250
これってどこでフォルダが作られてるの?
while(この部分)←この部分でフォルダが作られる?!
0252nobodyさん2005/06/07(火) 17:02:56ID:???
Yes. mkdir は フォルダを新しく作ったら 1、失敗した場合は 0 を返す。

なので、もし既にnewdirフォルダが存在していた場合、無限ループになるわけで。
0253nobodyさん2005/06/07(火) 17:26:57ID:???
>>252
ありがとうございました!
0254nobodyさん2005/06/07(火) 17:46:05ID:???
で、なんの役に立つんだ、ソレ、、、
0255 ◆wSkAcTBWJw 2005/06/07(火) 17:50:20ID:Jzx4SwvB
質問です。

\%hogehoge と記述した場合、どのような意味を成すのでしょうか?

具体的には↓のような文章なのですが、

return \%hogehoge if (rename($hogehoge{path}, $hogehoge{cureer}));

ifの中が真(renameに成功)の場合は\%hogehogeの中に何かを入れているのでしょうけども、
よく分かりません。どなたか教えてください。
0256nobodyさん2005/06/07(火) 18:06:11ID:???
リファレンスで調べよ
0257nobodyさん2005/06/07(火) 18:22:21ID:???
横から補足。
「perl リファレンス」でぐぐれって事な
0258nobodyさん2005/06/07(火) 18:39:51ID:???
renameに成功した場合は
hogehoge{path}を戻り値がリファレンスとして返される。
0259nobodyさん2005/06/07(火) 18:46:16ID:???
あ、違う
renameに成功した場合は
$hogehoge{cureer}を戻り値とし、リファレンスとして返される。
0260nobodyさん2005/06/07(火) 18:56:32ID:???
>>255

> \%hogehogeの中に何かを入れているのでしょうけども、
何も入れてないでしょ。
renameに成功したら、return \%hogehoge を実行してるだけ
0261nobodyさん2005/06/07(火) 19:59:03ID:???
とにかくリファレンスを理解しろ。話はそれからだ。
つーかそれからの話などそれで消えてなくなる。
0262nobodyさん2005/06/07(火) 20:07:48ID:???
>>259は何を言ってるんだ?
0263nobodyさん2005/06/07(火) 20:24:23ID:???
>>262
何か勘違いしてるのでしょう。ほっとけば気づくのでは。
0264nobodyさん2005/06/07(火) 20:33:44ID:B1nXEBrs
open(FILE, "+>$file");
$xx = <FILE>;
$xx++;
print FILE $offCount;
close(FILE);

ファイルから値とって、1増やして上書きしたいんですけど、上の通りにしてもできないんです。
$fileの初期値を1にして、上の通り実行すると、$fileが空っぽになる

open(FILE, "+<$file");
$xx = <FILE>;
$xx++;
print FILE $offCount;
close(FILE);

こんな感じで追加書き込みモードにすると、うまく行くので、変数にはちゃんと値が入ってるみたいです。

ご指摘お願いします。
0265nobodyさん2005/06/07(火) 20:44:04ID:???
>>264 下のでできたならいいじゃん。
$offCount ってなんだよ。
+> はまず最初にファイルを真っ白にするんだが。
■ このスレッドは過去ログ倉庫に格納されています