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

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

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

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

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

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

過去ログやお勧めサイトは >>2-10
0455nobodyさん2006/07/12(水) 21:04:03ID:???
>>454
ひどいな、そのコード…。
普通にunpackが一番早かろうに
0456nobodyさん2006/07/12(水) 21:10:09ID:???
{ がぬけてもた。 /(\d{2})/ ね
>>454
そw 普段こんなの絶対使わないw
が、たまに
my $i = 0;
my %hash = map { $_ or $i ++ } split /(.{20})/, $hoge ;
とかしたくなって誘惑される。
だからダークサイド。
0457nobodyさん2006/07/12(水) 21:24:50ID:???
>>453
>探す文字がパターンマッチを必要としないならindexの方が激速。
なるほど…今度使ってみよう。
>>456
それって20で割り切れなかったら…
まあ、承知のうえで書いてんでしょうけど。ダークサイド宣言してるし。
0458nobodyさん2006/07/12(水) 21:26:14ID:Fw7S49xF
質問です。

perlで書かれたあるcgiからhtmlを読んでその中身を表示したいのですが、さらに一歩踏み込んで、そのhtmlの中でさらにperlで書かれたcgiを呼んで、そのhtmlを動的に変更して表示したいのですが、そんなこと可能ですか?
0459すいません…2006/07/12(水) 21:50:43ID:???
ものすごく初歩的な事をお伺いして申し訳ないのですが、activeperlを
ダウンロードしたのですが、コマンドプロンプトでバージョンチェックを
しても、「バッチファイルとして認識していません」と表示されるのですが
どうすれば良いのでしょうか?
0460nobodyさん2006/07/12(水) 21:51:10ID:???
>>457
一応対応はできる、がこんなことするくらいだったら
普通に hash 作成すべき。

split /(.{20})/, $hoge ;
push @_, '', pop @_ if @_ % 20 != 0 ;
my $i = 0;
my %hash = map { $_ or $i ++ } @_ ;

04614602006/07/12(水) 21:59:24ID:???
s/20/2/
orz...吊ってくる
04624602006/07/12(水) 22:03:56ID:???
@_ % 2 != 0 ;
スレ汚しすまん
0463nobodyさん2006/07/12(水) 22:36:08ID:???
質問させてください
Perlでシェルスクリプト(useradd)を使用するにはどうしたらいいでしょうか?
0464nobodyさん2006/07/12(水) 23:02:43ID:???
>>458
なんでそんなことせにゃならんのかかわからんがSSIでも使えば?
0465nobodyさん2006/07/12(水) 23:03:43ID:l/BVmrr1
今WinXPとActivperlでプログラム作ってるんですが
これってPerlユーザーの主流じゃないようなんですが
何故ですか
0466nobodyさん2006/07/12(水) 23:08:41ID:???
>>463
system "your script" ;
もしくは your script をバッククォートにてかこむ。
your script 部分にはコマンド単独実行時の
打ち込むものすべてを入れる。
0467nobodyさん2006/07/12(水) 23:18:33ID:???
>>466さんを参考に以下を実行してみました。
#!/usr/bin/perl

$user = "aaa";
system "useradd $user";

エラーは出ないのですが、ユーザーが追加されてません。
なぜでしょうか?
0468nobodyさん2006/07/12(水) 23:30:16ID:???
useradd ってコマンドがあるのね orz...

具具ってみたけど
useradd って管理者権限が必要でしょ。
sudo useradd か perl 自体の実行を su でするか
しないとだめなんじゃない?

力になれそうにありません。すまん。
0469nobodyさん2006/07/12(水) 23:39:41ID:???
>>468さんありがとう
ちょっと質問変えてみます
Perlでシェルスクリプト実行するにはどうしたらいいでしょうか?
04704462006/07/12(水) 23:41:57ID:???
細かい話になるけれど。

>>453
> 視覚的にとかいう意味だと、スライスの方が数字なんだし読みやすい希ガス。

もちろんそりゃ読みやすいほうを使ったらよろしいんです。いつでもどちらかがイイってな話はしてないですから。

「視覚的に」と言うからには、数値のリストを添字として読み、それを元にスライスされる前のリストからどの値を取り出してどの値を捨てたのかを、脳内変換すること無しに、その姿を *目で見て* 把握できることを指しています。
逆から言えば、その意味では添字によるスライスの表現は、左辺 undef と比較した場合、視覚的ではないと言わざるを得ないでしょう、ということです。
0471nobodyさん2006/07/12(水) 23:43:05ID:3OAigznj
perlやっててmysqlでつまづきました
CGI経由でsql文を実行しようとすると動きません
コンソールからやっても動かないのでsql文がおかしいと思います。

mysql> update todo set content = aho where id = 9;
ERROR 1054 (42S22): Unknown column 'aho' in 'field list'

以上のエラーが出ています。
mysqlのバージョンは4.1.13です。
よろしくお願いいたします。
0472nobodyさん2006/07/12(水) 23:44:44ID:???
>>469
それじゃ同じ答えしか返ってこない。
system使えとか、``使えとか、qx() しろとか。
systemの戻り値を調べるか、$! を見て。
0473nobodyさん2006/07/12(水) 23:46:15ID:3OAigznj
''入れたら自己解決しました。
本当にありがとうございました。
0474nobodyさん2006/07/12(水) 23:53:16ID:???
>>469
>ちょっと質問変えてみます
>Perlでシェルスクリプト実行するにはどうしたらいいでしょうか?
まあ、同じ答えになるんだけどもちょっとだけ詳しく。
「/PATH/hoge.sh を引数 piyo つきで実行するなら」
system "sh /PATH/hoge.sh piyo" ;
「STDOUT を perl の変数に直接入れたいなら」
open EXE, "sh /PATH/hoge.sh piyo|" ;
@data = <EXE> ;
「STDERR とか細かなところまで制御したいなら」
perldoc IPC::Open3あたり
0475nobodyさん2006/07/13(木) 00:17:16ID:???
>>469
Inline::Bash を書いて CPAN に上げてください。
応援しています。
0476nobodyさん2006/07/13(木) 00:23:07ID:???
>>465
Perl は UNIX 上の仕事をやっつけるために生まれ、UNIX 系のシステムを中心に普及したから。
でも主流じゃないことを気に病むことはないよ。まずは悩む代わりに、その時間を使ってコードを書くんだ。
0477nobodyさん2006/07/13(木) 00:26:45ID:???
>469
`
0478nobodyさん2006/07/13(木) 00:32:23ID:???
>>453
>探す文字がパターンマッチを必要としないならindexの方が激速。

あんま誤解の生じること言わないほうがいいw
0479nobodyさん2006/07/13(木) 00:38:17ID:???
>>478
一般に正しいと思うけど。
(最適化のかかる)オートマトン作らなくて良いパターンでなければ、
indexの方が遥かに安価で速いだろう。
04804692006/07/13(木) 00:39:17ID:???
うーん。できない・・・
0481nobodyさん2006/07/13(木) 00:45:41ID:???
>>469 は管理者権限の意味を理解しているのか小一時間(ry
0482nobodyさん2006/07/13(木) 00:48:22ID:???
ここWebProg板だから、CGIでuseraddしようとしてたりして…。
0483nobodyさん2006/07/13(木) 00:48:54ID:???
>>479
正しくないw
ベンチとってみればわかるけど

A1 $_ =~ /hoge/
A2 index($_, 'hoge')

my $word = 'hoge';
B1 $_ =~ /$word/
B2 index($_, $word)

A1 A2 はほぼ同じ速さで、
B1 は B2 より速い。

index($_, $word[1]) or index($_, $word[1]) ・・・
より
/$word[0]/ or $word[1] ・・・
のが速い。

$_ が 'aaaaaaa......' で $word が 'baaaaaaaaaaaa' とかいう特殊な場合は考えないでね。
04844692006/07/13(木) 00:48:56ID:???
root権限でcgiを実行ってことですか?
0485nobodyさん2006/07/13(木) 00:50:07ID:???
>>483 訂正
× /$word[0]/ or $word[1] ・・・
○ /$word[0]/ or /$word[1]/ ・・・
0486nobodyさん2006/07/13(木) 00:50:10ID:???
>>479
日本語の問題だと思うけど。
「探す文字がパターンマッチを必要としないなら(最適化がかかるので)indexの方が激速なんてことはない。」
04874582006/07/13(木) 00:52:59ID:aY2uz4D9
>>464
レスありがとうございます。
もう少し具体的に質問します。

まずparent.cgiがあります。ここやってることはhtmlテンプレートを使ったchild.htmlファイルを読み込んで表示させるだけです。つまり
$template = HTML::TEMPLATE->new(
  filename => 'child.html',
);
print $template->output;
のような感じです。


このchild.htmlでは
<!-- TMPL_INCLUDE NAME="hoge.html" -->
のようにhtmlファイルを読み込んでいます。

しかし今回このhoge.htmlの代わりにhoge.cgiを使いたいのです。つまり静的なhtmlファイルではなくcgiを使ってここに表示される内容を動的に変化させたいわけです。これをするのにいい方法ありますでしょうか?
0488nobodyさん2006/07/13(木) 01:04:37ID:???
>>487
静的なhtmlをincludeするんじゃなくて、そこで普通にテンプレートを使えば
実質お望みの事ができると思うんだけど…。
0489nobodyさん2006/07/13(木) 01:05:37ID:???
>>487
いろいろ方法はあるだろうけど、全く別の CGI を呼ぶ 「いい方法」 というなら SSI が 「いい方法」 だと思うぞ。
0490nobodyさん2006/07/13(木) 01:06:25ID:???
実はそこに入れたいのは カウンター とかいう話じゃねえのかなw
0491nobodyさん2006/07/13(木) 01:17:32ID:???
質問
パーミッション777のディレクトリだとmkdirできるのですが
755だとできません。777だとセキュリティ的に問題ですよね?
755のディレクトリ直下に新規ディレクトリを作成するにはどうしたらいいでしょうか?
0492nobodyさん2006/07/13(木) 01:29:08ID:???
>>484
よく分かってないなら、そういうプログラムは組まない方がいい。
0493nobodyさん2006/07/13(木) 01:29:35ID:???
>>491
じゃー、chmod で 777 にしてから mkdir して 755 に戻せば?
0494nobodyさん2006/07/13(木) 01:43:02ID:???
>>493
777のディレクトリだとchmodできましたが
755のディレクトリだとchmodできませんでした・・・
04954872006/07/13(木) 02:29:43ID:aY2uz4D9
>>487
知識不足で申し訳ないです。普通にテンプレートを使うとはどういうことでしょう?テンプレートでcgiを実行するようなものがあるんですか?

>> 489
SSIで試してみました。parent.cgiから読み取るのをchild.shtmlにしてその中で<!--#exec cmd="perl hoge.cgi" -->として実行してみました。

結果普通にchild.shtmlを見ると実行が確認できたのですが、parent.cgiの中でshtmlを読み込んでしまうとSSIが実行されないようでダメでした。

>>490
カウンターではありませんw
0496nobodyさん2006/07/13(木) 02:50:05ID:???
>>495
テンプレート使ってるってことは、そもそもCGIで動いてるんでしょ。
その場で動的なページ作ればいいだけでは。

テンプレートで静的なhtmlを読み込んで、
さらにそこからCGI叩いて動的なページを、、、なんて考える前に。
04974952006/07/13(木) 03:13:47ID:aY2uz4D9
>>496
レスありがとうございます。

しかしそのテンプレートのhtmlの"ある部分"にCGIの結果を入れたいんですよ。そこはスタイルシート等で位置が厳密に決まっているのでその部分だけ元のparent.cgiでhoge.cgiを呼び出してってのは難しいんじゃないかと思ってます。
0498nobodyさん2006/07/13(木) 03:25:44ID:???
じゃあもう iframe でいいじゃん。それかAjax
0499nobodyさん2006/07/13(木) 06:06:02ID:???
>>483
言いたい事はわかるが、
それはパターンマッチを必要とする条件じゃないのか?

ただの文字列を探すならindexしかないだろ。
0500nobodyさん2006/07/13(木) 06:14:58ID:???
Cとかでは確かにindexは激速だが、Perlはもしかしたらindexが正規表現ライブラリの
皮をかぶってるかもしれないから、ソース見るかベンチ取るかしてみないと(ry
0501nobodyさんNGNG
昔indexの方が速かった覚えがあるので
ふつーに簡単なベンチ取ったら
indexの方が2倍 速かったんですけど
当然っちゃー当然の結果やね
0502nobodyさん2006/07/13(木) 06:32:39ID:???
こういう結果もあるぞ。

http://x68000.q-e-d.net/~68user/webcgi/search-1.html
05034572006/07/13(木) 07:33:25ID:???
気分良く寝てたので話題に乗りおくれた。
>>502
横レスだけどリンク先を良くよんだら?
search-2.cgi がせめて and 検索だったらいいんだけどリンク先は
アンフェアな比較だよ。(まあ、そういう目的で作ったんんじゃない
だろうけど)
以下は寝起きで確認したベンチマークのソース。
#!/usr/bin/env perl -w
#use strict ;
use Benchmark ;
my $str1 = ( 'a' x 30 ) . 'hoge' . ( 'a' x 10 ) ;
my $str2 = ( 'a' x 30 ) . ' hoge ' . ( 'a' x 10 ) ;
sub cont1(){ $str1 =~ /hoge/ }
sub cont2(){ $str2 =~ /hoge/ }
sub test_index1(){ index $str1, 'hoge' }
sub test_index2(){ index $str2, 'hoge' }
timethese 500000, { o0 => 'cont1' , o1 => 'cont2' , o2 => 'test_index1' , o3 => 'test_index2' } ;
================
Benchmark: timing 500000 iterations of o0, o1, o2, o3...
o0: 1 wallclock secs ( 1.66 usr + 0.01 sys = 1.67 CPU) @ 299401.20/s (n=500000)
o1: 2 wallclock secs ( 1.66 usr + 0.02 sys = 1.68 CPU) @ 297619.05/s (n=500000)
o2: 1 wallclock secs ( 1.43 usr + 0.01 sys = 1.44 CPU) @ 347222.22/s (n=500000)
o3: 1 wallclock secs ( 1.43 usr + 0.01 sys = 1.44 CPU) @ 347222.22/s (n=500000)
0504nobodyさん2006/07/13(木) 07:46:36ID:???
search-3.pl って eval でモロ高速化してんじゃん…
search-2 が and 検索であろうとなんであろうと、単純な index と正規表現
の速度比較のソースにはならんな。
0505nobodyさん2006/07/13(木) 13:17:19ID:???
>>500
>Perlはもしかしたらindexが正規表現ライブラリの
>皮をかぶってるかもしれないから
それは普通に考えてありえない…。
0506nobodyさん2006/07/13(木) 15:37:15ID:???
>>503

>>483 でやってみて。
検索文字が文字列か変数かどうかで結果が変わるんだよ。
0507nobodyさん2006/07/13(木) 16:04:15ID:???
>>506
>>503 と同じようなのを書いてベンチ取った。
何度かやってみたが、変数に入れてもindexの方が速かった。

#!/usr/bin/perl
use Benchmark;

my $str1 = ('a' x 30) . 'hoge' . ('a' x 10);
my $str2 = ('a' x 30) . ' hoge ' . ('a' x 10);

sub test_reg1 { my $hoge = 'hoge'; $str1 =~ /$hoge/; }
sub test_reg2 { my $hoge = 'hoge'; $str2 =~ /$hoge/; }
sub test_index1 { my $hoge = 'hoge'; index($str1, $hoge); }
sub test_index2 { my $hoge = 'hoge'; index($str2, $hoge); }

timethese 500000, {
 reg1 => 'test_reg1',
 reg2 => 'test_reg2',
 idx1 => 'test_index1',
 idx2 => 'test_index2',
};

idx1: 1 wallclock secs ( 0.83 usr + 0.00 sys = 0.83 CPU) @ 602409.64/s (n=500000)
idx2: 0 wallclock secs ( 0.83 usr + 0.00 sys = 0.83 CPU) @ 602409.64/s (n=500000)
reg1: 1 wallclock secs ( 1.00 usr + 0.00 sys = 1.00 CPU) @ 500000.00/s (n=500000)
reg2: 0 wallclock secs ( 1.00 usr + 0.00 sys = 1.00 CPU) @ 500000.00/s (n=500000)
0508nobodyさん2006/07/13(木) 16:11:59ID:???
>>506
ちなみに >>483 みたいに orで繋ぐのもやってみたけど、
やっぱり indexの方が速かった。
0509nobodyさん2006/07/13(木) 16:38:50ID:???
>>508
あー、ほんとだ。

でもね、検索対象のサイズを大きくするにしたがって逆転していくみたい。

my $str1 = ('a' x 10000) . 'hoge' . ('a' x 1000);
my $str2 = ('a' x 10000) . 'hage' . ('a' x 1000);

とかでやってみておくれ。 これは 11k だけど、うちの環境では 1k あたりから差がではじめた。
0510nobodyさん2006/07/13(木) 17:11:02ID:???
>>509
そりゃ長くなれば BM法にアルゴリズム変えるからね。正規表現の方は。
0511nobodyさん2006/07/13(木) 17:29:16ID:???
結局長さとか対象文字列に依存して違う結果が出るので
気になる人はよく考えるなり実験するなりして選択しろと
いうことか。
0512nobodyさん2006/07/13(木) 17:33:49ID:???
ただ正規表現でいつまでもオプショナルな文字列が無い
(オートマトン作らなくて良い)なんて事は無いし。
0513nobodyさん2006/07/13(木) 19:41:52ID:???
index使わないコーディングスタイルはKENTのせい。
0514nobodyさん2006/07/13(木) 19:59:46ID:???
>>513
お前が働かないのは誰のせい?
0515nobodyさん2006/07/13(木) 20:09:12ID:IeuSyhG1
いまだKENT信者っていたんだなw
0516nobodyさん2006/07/13(木) 20:52:55ID:???
あれ? KENTってindexを使っているんじゃなかったっけ?
0517nobodyさん2006/07/13(木) 21:53:37ID:???
パターンを詰め込んだ変数でevalで局所化もせずぐりんぐりんじゃなかった?
0518nobodyさん2006/07/13(木) 21:58:11ID:???
KENT 曰く
「それでもPerlは動いている」
0519nobodyさん2006/07/13(木) 22:11:56ID:Ms2xB21u
print "location:hoge.gif\n\n";

アクセス解析用のcgiで出力を上記のようにしています。
自分自身先日winXPのIE7のベータ版にブラウザを変えて、気付いたのですが、
キャッシュされてしまってページ間の移動時に思うように動作しないことがあります。

これはベータ版のバグかもしれませんが。普通はcgiファイルをキャッシュして読み込みを省略することはないと思うので。
それでキャッシュ対策のヘッダを付け加えたいのですが、
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="Tue, 20 Aug 1996 14:25:27 GMT">
これのPERLヘッダ?版はどう記述すればいいでしょうか?

宜しくお願いします。
0520nobodyさん2006/07/13(木) 22:22:32ID:Ms2xB21u
print "Pragma: no-cache\n";
print "Cache-Control: no-cache\n";
print "Expires: Thu, 01 Dec 1994 16:00:00 GMT\n\n";

一応こんな感じかなと思いますが、あってるのでしょうか?
http://www.gac.jp/article/index.php?stats=question&category=10&id=11811&command=msg
ここではどうやらNNにはこれでは残ってしまうように書いてあるのですが。
0521nobodyさん2006/07/13(木) 22:23:30ID:???
>>519
ってか Content-type 出すときに Last-modified とか一緒にだしてもダメなん?
05225192006/07/13(木) 22:24:37ID:Ms2xB21u
>>520は>>519ですすみません。
要は私の場合は戻るボタンが効かないように、ではなくて、
アクセス解析CGIがちゃんと動作することと、
チャットで使ってる、
<meta http-equiv="Refresh" content="15">
がちゃんと動作することなのですが。
05235192006/07/13(木) 22:25:35ID:Ms2xB21u
>>521
ありがとうございます。
その書き方がイマイチ自身がもてなかったので投稿して確認に参りました。
0524nobodyさん2006/07/13(木) 22:26:24ID:???
ダミーの値、たとえばtimeをアドレスにくっつけて別のURLにすれば解決。
0525nobodyさん2006/07/13(木) 23:13:19ID:???
'' and '' are identical (not copied) at test.cgi line 60

というエラーが出たんですが、これはどういうときに出るもんなんですか?
test.cgiの60行目で''と''が同じになってるよ(コピーされたとかじゃなくてな)
ってこと?意味が分かりません。
05265252006/07/13(木) 23:16:07ID:???
ちなみに60行目付近はこんな感じです。

59行目}elsif($action eq 'move'){
60行目&move;
61行目&move_complete;
62行目}elsif(......
0527nobodyさん2006/07/13(木) 23:29:36ID:???
>>525
シェルが吐いてるエラー。
どっかで cpしてるんだろうけど、コピー元とコピー先が同じだと出る。
05285252006/07/13(木) 23:46:26ID:???
>>527
該当箇所とは全然違うところが原因ってことですか。
コピーなんてしてたっけなぁ…。
レスありがとうございました!
0529nobodyさん2006/07/14(金) 00:05:57ID:???
Perlプログラムがおいてあるフォルダの中に、「temp」という名前のフォルダがあります。
この「temp」フォルダの中にある各フォルダの名前を$dirnameとしましょう。
各フォルダの中に、
{
$dirname
}
とだけ書かれた、「test.txt」という名前のファイルをそれぞれ新しく作りたいんです。

#!/usr/bin/perl
opendir DIR, "temp" or die "can't open temp\n";
@dir = map { -d "temp/$_" ? $_ : '' } readdir DIR;

foreach $dirname (@dir) {
chdir "./$dirname";
open OUT, ">test.txt" or die "can't create the file\n";
print OUT "{\n";
print OUT "$dirname\n";
print OUT "}\n";
close OUT;
chdir "..";
}

close DIR;
こんな感じにプログラムを書いてDOSプロンプトから実行したのですが何も起きません・・・
どうすればいいのか教えていただけないでしょうか?
05305252006/07/14(金) 00:20:17ID:???
60行目の
&move;を別の名前に変える動いた・・・なぜ??
逆に59行目の'move'を別の名前に変えただけでは同じエラーが。
0531nobodyさん2006/07/14(金) 00:26:19ID:???
>>529
とりあえず、mapで書いてる行をgrepで書き直す。
@dir = grep { -d "temp/$_" && !/^¥./ } readdir(DIR);
05325292006/07/14(金) 00:57:49ID:???
>>531
そのままコピペしてもう一度実行してみました。
が、駄目…。
0533nobodyさん2006/07/14(金) 01:07:41ID:???
横だけど
print @dir ; か
chdir "./$dirname" or die してみそ

@dir の中身は
./temp/hoge
./temp/piyo
じゃなく
hoge
piyo
になるYO @OSX
0534nobodyさん2006/07/14(金) 01:11:29ID:???
>>529
foreachの前の時点で@dirに期待した値が入ってるかどうかぐらいは
確認して問題の切り分けをしろよ。

あとchdirも失敗することがあるので or dieしとけ。
0535nobodyさん2006/07/14(金) 01:13:56ID:???
質問はしてくるけど、何も考えないのか。
誰かがなんか書いたらそれコピペして動くかどうかだけ?
なんだかなぁ。
0536nobodyさん2006/07/14(金) 01:14:40ID:???
わざわざ chdir せずに
open OUT, "> temp/$dirname/test.txt" or die "can't create the file\n";
ってすればいいじゃない
0537nobodyさん2006/07/14(金) 01:21:07ID:???
chdir でやるにしても foreach ループの前で chdir "temp/" が必要だしな。
05385292006/07/14(金) 01:27:17ID:???
>>536
できました!!!
ものすごく賢いやり方ですね。

>>534、>>533
chdirがうまくいってなかったというか、どうやら相対ディレクトリ名の指定とかが根本的
にわかっていなかったようです。openでカレントディレクトリも変わるんだと思ってました。

>>535
(・∀・)

みなさんどうもありがとうございます。
おかげさまで相対ディレクトリ名の指定ということに関してだいぶ理解が進みました。
0539nobodyさん2006/07/14(金) 02:04:03ID:???
あれ、chdir の有効範囲って local だったっけ?
そもそも1回目の
chdir "./$dirname";
でもし成功して temp/hoge/ になっちゃった場合、2回目はそこから chdir だから temp/hoge/fuga/ とかなんじゃねの?
0540nobodyさん2006/07/14(金) 02:23:45ID:???
>538
フルパスも相対パスも知らずにファイル扱ってたのか((( ;゚Д゚)))
0541nobodyさん2006/07/14(金) 02:33:40ID:???
>>539
>>529 のコードではファイルへの書き込みを行なった後に chdir ".." してるから
temp/ → temp/hoge/ → temp/ と戻るはず。

でもやっぱり読みづらいから、カレントディレクトリはあんまり変えて欲しくないなぁ。
0542nobodyさん2006/07/14(金) 16:30:45ID:???
-dはsymbolic linkのリンク先がディレクトリの場合も真を返すので、
前提条件でそういうのはないならOKだが一般的にはchdir ".."では
戻れないかもしれない。

perlのchdirにはファイルハンドルやディレクトリハンドルを渡せるので、
戻りたいディレクトリを開いておいてこっちを使うほうが安全。

0543nobodyさん2006/07/14(金) 18:02:15ID:IyAZlhFk
メールの標準入力からの取得を考えています。
qmailなのですが、perlにパイプさせるにはどうしたらよいでしょうか?

sendmailなら/etc/aliases でできますよね?
0544nobodyさんNGNG
http://man.qmail.jp/jman5/dot-qmail.html
0545nobodyさん2006/07/14(金) 19:43:53ID:???
ttp://www.uploda.org/uporg445281.txt

上記の掲示板に投稿する際のコード入力のスクリプトを作ったんですが
時たまコード入力より下が表示されなくなってしまいます。
どうすれば改善していいか分かりません。
どなたか改善よろしくお願いします。
0546nobodyさん2006/07/14(金) 19:50:38ID:???
>>545
<form>タグが無い。
<table>タグも無い。
下から5行目、==&gt;と書くべき所で、'==>' と書いている。
0547nobodyさん2006/07/14(金) 19:55:39ID:???
>>545
というか、sub code 自体をどこからも呼んでない…。
sub error は存在しない。
何がしたいの?そこからして不明。
0548nobodyさん2006/07/14(金) 19:59:34ID:???
掲示板の一部です。
削除パスワードの下に&code;で呼び出して使ってます。
sub errorはあります。

で何をしたいかと言うとどうやってもコード部分が原因だと分かっていてもたまにコード部分からしたが消える
のが直せないので直してほしいわけです。
0549nobodyさん2006/07/14(金) 20:04:26ID:???
直して欲しいなら全部晒せよ
0550nobodyさん2006/07/14(金) 20:05:56ID:???
>>548
そんな一部しかないんじゃ分からん…。

とりあえず、>>546 の通り&code の中でHTML表示してる部分、
tableタグの開始も終了も無いんだが…。そこが一番あやしい。
ちゃんとtableタグ入れてみたら?
それさえ分からなければ、PerlじゃなくてHTMLの質問だよ。
0551nobodyさん2006/07/14(金) 20:08:03ID:???
すんません・・・。
http://livetool.ty.land.to/aska/aska.cgi
ココに問題の掲示板とソースをのっけてあります。

数回更新ボタンを押していると表示されなくなりますのでそれを改善したいのです。
よろしくお願いします。
0552nobodyさん2006/07/14(金) 22:04:47ID:LnOAoBN3
mysqlとperlで会員サイト作ってみたいのですが
よい参考書を教えてください
0553nobodyさん2006/07/14(金) 22:11:09ID:???
>>552
WEb制作板池
0554nobodyさん2006/07/14(金) 22:26:32ID:cNzjTfEo
>>552
その程度は参考書などいらない。
というか基本的にプログラム組むのに参考書なんていらない。

http://www.rfs.jp/sb/index.html
ここに書いてある内容を全て理解・・しなくても簡単にそのくらいは作れる。
まずは自分のパソコンに仮想環境を作ることが先決だ。
そうすればどれだけ程度の低い話なのかわかる。

優れたプログラムを組めるかどうかは人によって優劣がでるが、
最低限動くものなら健常者であれば誰でも可能。
■ このスレッドは過去ログ倉庫に格納されています