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

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

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

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

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

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

過去ログやお勧めサイトは >>2-10
0081nobodyさん2005/10/18(火) 22:27:43ID:???
>>80
「変数宣言」がコメントになってないとか
あと、何がうまくいかないのか不明。
500エラーなのかファイルに保存されないのか、詳しく書くように。
0082802005/10/18(火) 22:32:41ID:???
>81
すみません。
インターナルサーバエラーを起こして動かないという状況です。

ちなみに変数宣言は
my ($form, $com);
としています。
0083nobodyさん2005/10/18(火) 22:41:45ID:???
>80
ヒント:Content-type(たぶん)
0084792005/10/18(火) 23:10:34ID:???
すいません、ム板のほうがよさげなので移動します。
0085nobodyさん2005/10/18(火) 23:16:01ID:???
>>84
早速マルチポストかよ。

来ないで下さい。
0086nobodyさん2005/10/18(火) 23:42:22ID:???
マルチポストの意味ちげーよ
0087nobodyさん2005/10/19(水) 00:31:56ID:???
>>80
use CGI::Carp qw(fatalsToBrowser);
おまじないで二行目に貼って。
0088nobodyさん2005/10/19(水) 00:35:04ID:???
>>69

unlink(glob("dir/*"));

多分ね。
0089nobodyさん2005/10/19(水) 00:52:35ID:???
それより「ちょっとした掲示板」で「フォルダの中全消し」という仕様が
何に使われるのかが非常に気になるのだが・・・
0090nobodyさん2005/10/19(水) 01:16:52ID:???
>>89
スレまたはレス別にログファイルが分かれていて、ログのリセットとかじゃなかろうか
0091nobodyさん2005/10/19(水) 17:01:02ID:mMzWKjOm
先生質問です。
指定したディレクトリ内にある、ファイルとディレクトリの名前、
そしてそれらのパーミッションを取得して表示させるCGIを作成してます。
stat でファイルのパーミッションは上手く取得できるのですが、
ディレクトリのパーミッションは 000 が返ってきます。
どうやったらディレクトリのパーミッションも取得できますか?

該当部分の今のソースはこんな感じです。
$dir ="cgi-bin";

opendir(DIR, $dir);
while (defined($uhaha = readdir(DIR))) {
if ($uhaha ne '.' && $uhaha ne '..') {
@st = stat "$permis";
$per = substr((sprintf "%03o", $st[2]), -3);
print "$uha:$per<br>\n";
}
}
closedir(DIR);
0092nobodyさん2005/10/19(水) 17:13:00ID:mMzWKjOm
う、ソース訂正です。

opendir(DIR, $dir);
while (defined($uhaha = readdir(DIR))) {
if ($uhaha ne '.' && $uhaha ne '..') {
@st = stat "$uhaha";
$per = substr((sprintf "%03o", $st[2]), -3);
print "$uhaha:$per<br>\n";
}
}
closedir(DIR);
0093nobodyさん2005/10/19(水) 17:18:56ID:???
>>91-92
こちらの環境ではちゃんと表示されるよ
問題は他のところにあると思う

関係ないけれど、
> $per = substr((sprintf "%03o", $st[2]), -3);
ここは
$per = sprintf "%03o", $st[2] & 0700;
の方が良いんじゃないかと思ったり
0094932005/10/19(水) 17:20:55ID:???
うわ、全角スペースとマスクの値の二重ミスした・・・スマソ。正しくは
$per = sprintf "%03o", $st[2] & 0777;
0095nobodyさん2005/10/19(水) 17:36:12ID:???
>>91
パーミッションを000にすることは普通ないだろうから、
statに失敗している可能性があるな。

opendir(DIR, $dir);
while (defined($uhaha = readdir(DIR))) {
if ($uhaha ne '.' && $uhaha ne '..') {
@st = stat "$uhaha";
if (@st > 0) {
$per = substr((sprintf "%03o", $st[2]), -3);
print "$uhaha:$per<br>\n";
} else {
print "$uhaha:stat失敗($!)\n";
}
}
}
closedir(DIR);

とでもして試してみたらどうだろうか。
0096nobodyさん2005/10/19(水) 17:57:17ID:???
あれ、よく読んだらreaddirで返ってくるのはパスじゃなくてファイル名だから・・・
stat "$dir$uhaha"
じゃなかろうかカレントディレクトリでテストしちゃったから気づかなかった
0097912005/10/19(水) 17:57:31ID:mMzWKjOm
>>93-94
ありがとうございます。
後述しますが、こちらの環境のせいかもしれません.....
あと、$per = sprintf "%03o", $st[2] & 0777; の方が何故良いのか、
パッと見てまだわからないので、後で調べてみます。

>>95
やってみました。
全部「stat失敗(No such file or directory)」でした。

そして、なんらかの原因でうまく情報を取得できていないみたいだったんで、
情報を取得したいディレクトリの中に、このスクリプトを放り込んで実行した所、
完璧に表示されました。
上位でも下位でも、階層が違うディレクトリを指定すると、
上手く情報が取得出来ないようです。
なんでだ...
0098912005/10/19(水) 18:00:40ID:mMzWKjOm
>>96
全て謎がとけましたw
その通りですね。
テンパってるとダメですね.....ありがとうございました!
0099nobodyさん2005/10/19(水) 23:56:03ID:???
# ID,NAME,ADDRESS,TEL
0,yamada,A32,333
1,tanaka,B22,555

上記のようなCSVファイルから1行ずつ読み込んでハッシュに入れたいのですがどのように
すればいいのでしょうか。問題点がCSVの一行目をカンマごとにばらしたのをハッシュのキー名
にして2行目からをそれぞれの値として入れなくてはいけないのです。
モジュールも使えないのでよりどうしたらいいのかわかりません。
$filename="test.csv";
%arr2 = &COUNT($filename);
foreach $value (values %arr2) {
print "$value\n";
}
sub COUNT{
open (IN, $filename)or die "$!";
while(<IN>){
$buff = $_;
chomp($buff);
@buff = split(/,/, $buff);
%arr2 =();
$arr2[] = @buff[];
$arr2[] = @buff[];
$arr2[] = @buff[];
close IN;
return %arr2;
}
}
whileの前に先に一行だけ読み込んでキーを作ってしまうべき何でしょうか。
ずっと堂々巡りで悩んでしまいました。
0100nobodyさん2005/10/20(木) 00:29:03ID:???
>>99
>whileの前に先に一行だけ読み込んでキーを作ってしまうべき何でしょうか。

それが一番ラクだと思うけど。むしろ何故ソレを実行しないのかわからん。
0101nobodyさん2005/10/20(木) 00:32:14ID:???
俺は

@buff = split(/,/, $buff);
%arr2 =();
$arr2[] = @buff[];
$arr2[] = @buff[];
$arr2[] = @buff[];

の意味が分からん。俺の知識不足。つまり

@buff = split(/,/, $buff);
%arr2 =();
$arr2[0] = @buff[0];
$arr2[1] = @buff[1];
$arr2[2] = @buff[2];

ってことなの?
0102nobodyさん2005/10/20(木) 00:36:48ID:???
いや、普通は

$arr2[0] = shift(@buff);
$arr2[1] = shift(@buff);
...

だろうな。そもそもハッシュ使いたいっぽいからこれでも違うけど。
てか今はどうしていいかわからなくなってる状態だと思われ。
0103nobodyさん2005/10/20(木) 00:36:51ID:???
>>99
これでいいのか分からんが。

count('test.csv' => \%data) or die 'Failed to count';
print "$_: ", join(' / ', @{$data{$_}}), "\n" for sort keys %data;

sub count {
  -f (my $file = shift) or warn('No such file'), return;
  open IN, '<' . $file or warn($!), return;

  my $hash = shift;
  my @key = <IN> =~ /\w+/g;

  while (<IN>) {
    chomp;
    my $i = 0;
    push @{ $hash->{$key[$i++]} }, $_ for split /,/;
  }

  close IN;
}
0104992005/10/20(木) 00:47:28ID:???
一行だけ先に読み込む案は書いてる途中で思いついたからです。
この次の段階としてCSVファイルの任意の部分だけを読み込み、書き換えよう
にしなくてはいけないので、できるだけ汎用性を持たせた関数を作るよう心がけるように
との事なので、悩んでいました。

配列のところはそのようにするつもりです。whileでまわして配列をハッシュに移すのに
途惑っていて流れが整理できなくなっていました。

家の環境ではすぐに試せないのですが皆さんいろいろアドバイスありがとうございます。
0105nobodyさん2005/10/20(木) 00:53:29ID:???
>>104
そんな時にはActivePerl+AnHTTPDのPerlCGI再現セットがお勧め。
0106992005/10/20(木) 01:20:15ID:???
ぐぐって試してみます。情報どうもです。
0107nobodyさん2005/10/20(木) 01:46:11ID:???
>>99
my @data;

open(IN, $file) or die $!;

(my $key = <IN>) =~ s/^#\s*|\n//g;
my @keys = split(/,/, $key);

for (<IN>) {
  chomp;
  local %_;
  @_{@keys} = split(/,/);
  push( @data, { %_ } );
}

close(IN);

---
結果、以下のように代入される。

@data = (
  { 'ID' => '0', 'NAME' => 'yamada', 'TEL' => '333', 'ADDRESS' => 'A32' },
  { 'ID' => '1', 'NAME' => 'tanaka', 'TEL' => '555', 'ADDRESS' => 'B22' }
);

アクセスは、
print $data[0]{NAME}; # yamada
print $data[1]{TEL}; # 555
0108nobodyさん2005/10/20(木) 02:51:02ID:???
> モジュールも使えないのでよりどうしたらいいのかわかりません。
と書いてあるのは分かってるが、あえてCPAN モジュール版を。CSVって、
カンマで区切ってるだけと思ってる人も多いけど、泥くさいフォーマットだよ。

use strict;
use warnings;

use IO::File;
use Text::CSV;

my $parser = Text::CSV->new();

my $in = IO::File->new('test.csv', 'r')
or die('test.csv: ' . $!);

(my $field_names_line = <$in>) =~ s/^#\s*//;
$parser->parse($field_names_line)
or die('field keys are not found');
my @field_names = $parser->fields();

my @list = ();

while (1) {
my $row = $parser->getline($in);
last unless 0 < @$row;

my %hash = ();
@hash{@field_names} = @$row;

push(@list, \%hash);
}
@list = (...>>107 と同じ内容...);
0109nobodyさん2005/10/20(木) 17:31:51ID:jR9yJZEc
質問です。
linuxサーバでパスワードの変更の際(passwdコマンド)に、
推測されやすいと判断をした場合、再入力を求めるようにするプログラムをperlで作る事は可能でしょうか?
可能な場合はどのような設置をすればよいのでしょうか?
0110nobodyさん2005/10/20(木) 19:47:09ID:???
>>109
単なる興味で聞くが、推測されやすいかどうかという判断を、どんな内容にする予定なの?
0111nobodyさん2005/10/20(木) 19:53:12ID:???
>>109
passwdコマンドにそのチェックをする機能を追加した
ようなものをperlで書いてもとのpasswdコマンドを
置き換えてしまうのが一番楽じゃないかと思われ。
0112nobodyさん2005/10/20(木) 20:01:43ID:???
>>111
そのようなものを >>109 が書けるか甚だ疑問な件。
0113nobodyさん2005/10/20(木) 20:31:40ID:???
>>109
可能。だが、その質問をしている時点で現在の>>109には敷居が高いだろう。

また、いくらシステム側で対処しても、
その手の脆弱性の根本部分はユーザーのセキュリティー意識にある。
「推測されにくいパスワードを使う」ことと教えてあげる方がよい。
0114nobodyさん2005/10/20(木) 20:45:15ID:jR9yJZEc
>>110
例えば、4桁未満は駄目とか、数字のみは駄目等です

>>112
それはpasswdコマンドを書き換えるのはどこを操作すればよいのでしょうか?
また、perlで無くてもっと簡単にかける方法は無いものでしょうか
(どのファイルをどのように書き換えたらよいか等)

>>113
全くその通りなんですけど、自分の今後の為にと思いまして。
01151102005/10/20(木) 20:59:52ID:???
>>114
> 例えば、4桁未満は駄目とか、数字のみは駄目等です

これって既に、生の passwd コマンドが実装している機能では?
同じ機能を Perl で再実装したいって思うのは自由だけどね。

とりあえず、passwd のマニュアルページとソースコードを読んでみることをお勧めします。
0116nobodyさん2005/10/20(木) 21:03:16ID:???
関係ないけど、 getpass() が欲しいことがよくある。
0117nobodyさん2005/10/20(木) 22:05:06ID:???
>>114
その質問レベルを見る限りではpasswdコマンドをどうこうしようとか
思う前に基本を勉強した方がよさそうだな...
0118nobodyさん2005/10/20(木) 22:29:24ID:???
>>117
同感
rootで動くためにはパーミッションに細工した上で実行時にIDを変えてやる必要があるが、
この方法を知らないようなレベルで作ろうとしてもセキュリティホールを作ってしまう危険の方が高いと思う…
0119992005/10/21(金) 00:50:33ID:???
質問なのですが>>107さんのソースを実行してみたところ
4つめのキーの部分が出てこないのはどうしてでしょうか?
少しソースを変えていますが、
スカラーで確かめてみるとハッシュのキーは4つ確保されているのにADDRESSの項目だけが
表示されません。よろしくお願いします。
0120nobodyさん2005/10/21(金) 01:18:14ID:???
>>119
>ハッシュのキーは4つ確保されているのに
じゃあそのキー名出してみ
01211192005/10/21(金) 01:28:01ID:???
表示は
print $data[3]->{ID};
print $data[3]->{NAME};
print $data[3]->{TEL};
print $data[3]->{ADDRESS};
のようにやっています。

4つ目のキーがうまくついていないのでしょうか。
0122nobodyさん2005/10/21(金) 01:35:25ID:???
>>121
たぶん改行コード。shift_jisで書いてない?
0123nobodyさん2005/10/21(金) 01:41:21ID:???
>>116
http://www.kt.rim.or.jp/%7Ekbk/perl5.005/perlfaq8.html#How_do_I_ask_the_user_for_a_pass

>>119-122
改行コードが原因なら

- (my $key = <IN>) =~ s/^#\s*|\n//g;
+ (my $key = <IN>) =~ s/^#\s*|\s*\z//g;

ASCII 互換なら文字コードは関係無い。
0124nobodyさん2005/10/21(金) 01:47:44ID:???
>>107のコードは>>99には難し過ぎやしないか?
結果を出すことよりも動作を理解するほうが先だと思うのだが。
0125nobodyさん2005/10/21(金) 01:59:13ID:???
いろいろありがとうございます。
改行コードかも知れません。最初の読み込みではずしてしまっているみたいなので。
いろいろ試してみます。
これとは別なcsvなのですがこちらの値は"yamada" のように"とタブでで区切っていていてこれを
=~ s/" //g;
ではずそうといろいろいじてるうちになってしまったみたいです。
こちらは今何とか自分で試行錯誤しています。
ありがとうございました。
0126nobodyさん2005/10/21(金) 02:39:27ID:???
>>123
修正サンクス。

あと、細かいけどこっちの方がよかった。展開が減るので。

-  push( @data, { %_ } );
+  push( @data, \%_ );

>>125
改行の取り扱い不足でした。sorry。

> これとは別なcsvなのですがこちらの値は"yamada" のように"とタブでで区切っていていてこれを
> =~ s/" //g;

tab 文字も \s でマッチするので

s/"\s*//g;

がおすすめ。
0127nobodyさん2005/10/21(金) 04:21:29ID:???
>>126
\%_ にするんだったら local %_; じゃないほうがよいのでわ。
Excelなら、クオーテーションは Perlメモ の CSV の項を読むといいと思う。
0128nobodyさん2005/10/21(金) 04:30:43ID:???
>>127
local $_ は単に global な %_ を壊さないようにしている
のだけど(このコードだと不要だけど)、
それ以外にデメリットってあります?
0129nobodyさん2005/10/21(金) 04:32:11ID:???
正:local %_ は
01301282005/10/21(金) 04:40:25ID:???
というか、>>107 の場合、local をつけないと、以前 push した
値を上書きしまいますね。


まぎらわしいので my 変数の方がいいのでは、ってことですね。
0131nobodyさん2005/10/21(金) 15:03:57ID:???
sousou
0132nobodyさん2005/10/21(金) 15:24:58ID:???
local %_ って名前を考えるのが面倒だっただけだろ?
0133nobodyさん2005/10/21(金) 17:35:12ID:???
しつもんです。
アンケイートをつくっているのですが、

【hoge.html1】
<FORM ACTION="hoge1.cgi" METHOD="post">→送信→log1
【hoge.html2】
<FORM ACTION="hoge2.cgi" METHOD="post">→送信→log2


【hoge.html1】
<FORM ACTION="hoge.cgi" METHOD="post">→次へ→この分をまずlog3へ
【hoge.html2】
<FORM ACTION="hoge.cgi" METHOD="post">→送信→log3→おわり

てしたいんだけど、(2つのフォームの内容繋げて一気に送ってlog残したい)
どんなソース書けばいいですか?




0134nobodyさん2005/10/21(金) 17:38:17ID:???
そこはかとなくスレ違いのような気がするがいかがか?

javascript でも勉強したら?
0135nobodyさん2005/10/21(金) 20:29:51ID:???
>>133
一意のIDをcookieか何かで発行する、いわゆる「セッション」を使うのが普通だが、
htmlで、と言われると困る。mod_rewriteでも使って誤魔化すか。
で、言語は何よ?
0136nobodyさん2005/10/21(金) 20:33:21ID:???
ああ、ここにいるからperlに決まってるのかorz 最後の一文はスルーしておいて
0137nobodyさん2005/10/21(金) 20:49:56ID:???

=~s/\Eアンケ(イ|ー)ト\Q/アンケ$1ト/g;
0138nobodyさん2005/10/21(金) 20:55:34ID:???
QとE逆だろw
0139nobodyさん2005/10/21(金) 21:01:40ID:???
それ以前にマッチしないじゃんw

>>133
元のhoge1.cgiとhoge2.cgiはコピーして2つにしただけでしょ?
1のクエリはすぐに処理せず
2のフォームのhiddenにでも入れておいたら?
0140nobodyさん2005/10/21(金) 21:03:44ID:???
たしか JSスレの最近の過去スレにあったぞ
0141nobodyさん2005/10/22(土) 15:11:53ID:m3HcshJv

フォームで入力後、WEBに以下のような感じでフィルに書き出すんですが


if(open(FILE,">>hogehoge.log")) {

$record .= $in{'name'}."\t";
$record .= $in{'kana'}."\t";

                     jcode::convert(\$record,'sjis');

print OFILE $record;
close(OFILE);

 

 name が空白でないかを書き込み前にチェックしたいのですが、うまく動きません。

以下の記述を入れるかと思いますが、どの行に入れたら動作するでしょう?

if ($FORM{'name'} eq "") { &errexit("お名前は必ず入力してください"); }

以下のエラーが出ます。

Internal Server Error
The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, [no address given] and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.

よろしくお願いします。<(_ _)>
0142nobodyさん2005/10/22(土) 15:15:32ID:???
>>141
>>87
0143nobodyさん2005/10/22(土) 15:27:16ID:G1Q0Ugqh
OFILE なのか FILE なのかはっきりさせよう。
0144nobodyさん2005/10/22(土) 15:33:15ID:m3HcshJv
>>142

エラー行が表示されました。ありがとうございます。<(_ _)>

>>143

OFILE と FILE の違いがよくわかっておりません。 ご教授下さい <(_ _)>
0145nobodyさん2005/10/22(土) 15:35:19ID:m3HcshJv
>>142

Undefined subroutine &main::errexit called at /virtual/hogehoge.cgi line 18.


追記した↓この行があかんみたいです 
if ($FORM{'name'} eq "") { &errexit("お名前は必ず入力してください"); }


0146nobodyさん2005/10/22(土) 15:43:00ID:???
perlによるプログラミングを始めたところです。
知識レベルとしては、Cで普通にプログラムは書けますが、
perlは本当に始めたばかりです。

<質問事項>
基本の基本ということで以下のコードを書いたのですが
画面上に何も表示されません。(エラー等も表示されません)
printは画面(標準出力)に文字列を表示させると思っています。
コードもしくは認識に誤りがあるのでしょうか?

<コード>
■test.cgi
#!/usr/bin/perl

print "Program start\n";
print "Program end\n";

■実行方法
./test.cgi
■ファイルの属性
-rwxrwxrwx 1 root www 129 10月 22 15:37 test.cgi
■whichの結果
which perl
/usr/bin/perl
0147nobodyさん2005/10/22(土) 15:54:11ID:???
> 知識レベルとしては、Cで普通にプログラムは書けますが、
・・・
0148nobodyさん2005/10/22(土) 15:55:01ID:???
>>145
3行目に以下を追加。

sub errexit { print "\n", @_; exit; }
0149nobodyさん2005/10/22(土) 15:55:58ID:???
>>146
CGIでの Hello World レベルくらい調べろよ。
0150nobodyさん2005/10/22(土) 15:56:02ID:???
>>146
2行目に以下を追加。

print "\n";
0151nobodyさん2005/10/22(土) 16:01:09ID:???
>>146
/usr/bin/perl ←これがすぐに終了して何も返さないスクリプトに入れ替えられてる
0152nobodyさん2005/10/22(土) 16:04:32ID:m3HcshJv
>>148

ご指導ありがとうございます。

文字列が入ってても以下のメッセージが表示されます。

「お名前は必ず入力してください。」
0153nobodyさん2005/10/22(土) 16:10:34ID:???
>>152
問題が再現する最短のコードを載せるべし。
0154nobodyさん2005/10/22(土) 16:14:10ID:m3HcshJv
>>153 すいません。

#!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);
sub errexit { print "\n", @_; exit; }

require "cgi-lib.pl";
require "jcode.pl";

if ($FORM{'name'} eq "") { &errexit("お名前は必ず入力してください。"); }

if(open(OFILE,">>hogehoge.log")) {

$record .= $in{'name'}."\t";
print OFILE $record;
close(OFILE);

#フォームの表示

print "Content-type: text/html\n\n";
print qq!
<HTML>
<HEAD>



0155nobodyさん2005/10/22(土) 16:17:36ID:JX8EwRu8
perlで質問です、よろしくお願いします。

「AAA AAAA」と「BBBBBBB」というデータを保存する際にスペースで区切ったために
「AAA\ AAAA BBBBBBB」のようにデータ上のスペースの前には\を置いて保存されています、
またデータ上の\は\\で保存されています。
これを読み出すための簡約化された手順がありましたら教えてください。
とりあえずデータ上で9文字目が区切りであることを検出できればいいです。

それとも、フォーマットについてもっとこうするべきだというものありましたら
いまからでも変更の余地がありますので提案お願いします。
0156nobodyさん2005/10/22(土) 16:20:06ID:m3HcshJv
>>153

if ($FORM{'name'} eq "") { &errexit("お名前は必ず入力してください。"); }

↑この行を省くと動作するのですが、空白でも post してしまいますので。
0157nobodyさん2005/10/22(土) 16:22:39ID:???
>9文字目が区切りである

固定長なら \ でエスケープする必要ないんじゃ?
0158nobodyさん2005/10/22(土) 16:28:45ID:???
>>154
$in{"name"}
$FORM{"name"}
これはどこで取得してるんだ?
0159nobodyさん2005/10/22(土) 16:34:17ID:m3HcshJv
>>158 すいません。

<HTML>以下のフォームにて取得してます。

<FORM ACTION="hogehoge1.cgi" METHOD="post" name="FORM" id="FORM">



<td colspan="2" nowrap><font size="3">ご氏名</font></td>
<td height="25"><input type="text" name="name" style="ime-mode: auto;" size="30">
</td> </tr>

0160nobodyさん2005/10/22(土) 16:35:29ID:???
>>159
それは渡す方だろ。
受け取る方の話。
0161nobodyさん2005/10/22(土) 16:41:24ID:m3HcshJv
>>160 すいません。

FORM ACTION で name に入力された文字が代入されて

$record .= $in{'name'}."\t";

のところで タブ入りで record に渡されて

hogehoge.log ファイルに書き込むのと違うのですか?
0162nobodyさん2005/10/22(土) 16:44:35ID:JX8EwRu8
>>157
9文字の固定長ではありません。
サンプルに対して取得したいデータが9であるという、あくまでも例です。

やはり自分で1文字ずつ検証して作るしかないでしょうか?
0163nobodyさん2005/10/22(土) 16:47:54ID:???
>>161
えーっとだ。
>>152でHTMLから送信してもエラーが出ちゃうと言う問題だろ?
書き込むとかどうでもよい。
受け取りができてないのよ。
cgi-lib.pl使ってるみたいだから↓読んで。
http://www.futomi.com/lecture/form/cgilib.html
0164nobodyさん2005/10/22(土) 16:48:31ID:???
>>162
区切り文字変えるのが早い。
0165nobodyさん2005/10/22(土) 17:05:01ID:m3HcshJv
>>163 参照URL迄、すいません。

以下の感じでよろしいんでしょうか?


my %input;
&ReadParse(\%input);

$YourName = $input{'name'};

if ($FORM{'YourName'} eq "") { &errexit("お名前は必ず入力してください。"); }
0166nobodyさん2005/10/22(土) 17:05:32ID:???
>>154 の頭の中では $FORM{'name'} と $in{'name'}. が同じなのかな。
0167nobodyさん2005/10/22(土) 17:06:19ID:???
>>165
こいつすげえ・・・。
0168nobodyさん2005/10/22(土) 17:09:47ID:???
>>165
違う。

my %input;
&ReadParse(\%input);
if ($input{'name'} eq "") { &errexit("お名前は必ず入力してください。"); }
--以下保存処理

あと、試してから聞きなさい。
0169nobodyさん2005/10/22(土) 17:25:59ID:???
そろそろ釣り宣言
0170nobodyさん2005/10/22(土) 17:30:16ID:m3HcshJv
>>168 ありがとうございます。

入力文字があっても 以下のメッセが表示されます。(・_・、)

"お名前は必ず入力してください。"
0171nobodyさん2005/10/22(土) 17:38:30ID:???
>>170
変数に何が入ってるかわからんのなら、printしてみようね。
あと、めんどいからどっかにCGIプログラムとHTMLのソースうpしる。
0172nobodyさん2005/10/22(土) 17:47:29ID:???
一度ReadParseしないで書いてみては。勉強になるし。
0173nobodyさん2005/10/22(土) 18:02:37ID:m3HcshJv
>>171 すいません、よろしくお願いします。

http://other.free-uploader.com/up/

hoge_1.cgi です。
0174nobodyさん2005/10/22(土) 18:07:29ID:???
>>173
Passがかかってて落とせません。
0175nobodyさん2005/10/22(土) 18:14:20ID:m3HcshJv
>>174

たびたび、すいません。

0123
0176nobodyさん2005/10/22(土) 18:18:44ID:???
&ReadParse;
if (!$in{'name'}) { &errexit("お名前は必ず入力してください。"); }
0177nobodyさん2005/10/22(土) 18:19:41ID:???
&ReadParse 呼ぶのは1度だけ
0178nobodyさん2005/10/22(土) 18:27:02ID:vPMo38wN
これftpソフトで落としたいんですけど、user名とpassのところには何を入力すればいいんですか?
http://allabout.co.jp/career/cgiperl/closeup/CU20040805A/index4.htm
0179nobodyさん2005/10/22(土) 18:30:55ID:???
>>178
anonymous と きみのメルアド
0180nobodyさん2005/10/22(土) 18:36:12ID:m3HcshJv
>>177 解析ありがとうございます。

ひとつを消したんですが、結果は

>>170 と同じです。 (×_×)
■ このスレッドは過去ログ倉庫に格納されています