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

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

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

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

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

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

過去ログやお勧めサイトは >>2-10
0002nobodyさん2005/05/25(水) 06:42:32ID:PVpWgcdf
関連スレ
△▲ WebProg 初心者の質問 Part11 ▼▽
http://pc8.2ch.net/test/read.cgi/php/1101635909/

CGIだけど、なんか質問ある? Part 12
http://pc8.2ch.net/test/read.cgi/php/1097334246/

【Perl,CGI】参考書籍 第三版
http://pc8.2ch.net/test/read.cgi/php/1030209573/

【Perl】ファイルロック(排他処理)について語ろう
http://pc8.2ch.net/test/read.cgi/php/1024795138/

★負荷軽減対策委員会(Perl、PHP)★
http://pc8.2ch.net/test/read.cgi/php/1034645635/

Perlモジュールについて
http://pc8.2ch.net/test/read.cgi/php/997829243/

CGIに依存しないPerlの話題一般/Part2
http://pc8.2ch.net/test/read.cgi/php/1030548610/

★三 【 スクリプト改造工房 PART 8 】 ★三
http://pc8.2ch.net/test/read.cgi/php/1077525387/

【 スクリプト改造依頼スレ 】(丸投げ) part3
http://pc8.2ch.net/test/read.cgi/php/1105046286/
0003nobodyさん2005/05/25(水) 06:44:34ID:PVpWgcdf
[過去ログ] 1 of 4

Part1 http://tako.2ch.net/test/read.cgi?bbs=perl&key=957208980 参照不能
 DAT: http://tako.2ch.net/perl/dat/957208980.dat
Part2 http://tako.2ch.net/test/read.cgi?bbs=perl&key=971817087 参照不能
 DAT: http://tako.2ch.net/perl/dat/971817087.dat
Part3 http://tako.2ch.net/test/read.cgi?bbs=perl&key=979894521 参照不能
 DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part4 http://tako.2ch.net/test/read.cgi?bbs=perl&key=984430156 参照不能
 DAT: http://tako.2ch.net/perl/dat/979894521.dat
Part5 http://pc.2ch.net/php/kako/988/988728069.html
Part6 http://pc.2ch.net/php/kako/996/996075607.html
Part7 http://pc.2ch.net/php/kako/1000/10002/1000267444.html
Part8 http://pc.2ch.net/php/kako/1003/10039/1003900311.html
Part9 http://pc.2ch.net/php/kako/1009/10095/1009549309.html
Part10 http://pc.2ch.net/php/kako/1014/10145/1014556702.html
0004nobodyさん2005/05/25(水) 06:45:16ID:PVpWgcdf
[過去ログ] 2 of 4

Part11 http://pc.2ch.net/php/kako/1017/10172/1017201229.html
Part12 http://pc.2ch.net/php/kako/1019/10199/1019917048.html
Part13 http://pc.2ch.net/php/kako/1022/10227/1022731565.html
Part14 http://pc.2ch.net/php/kako/1026/10269/1026977659.html
Part15 http://pc.2ch.net/php/kako/1028/10288/1028816385.html
Part16 http://pc.2ch.net/php/kako/1032/10320/1032070299.html
part17 http://pc.2ch.net/php/kako/1034/10345/1034583844.html
part18 http://pc.2ch.net/php/kako/1037/10377/1037797479.html
part19 http://pc.2ch.net/php/kako/1042/10422/1042260745.html
part20 http://pc2.2ch.net/php/kako/1044/10447/1044717887.html (タイトルに19と誤記)
0005nobodyさん2005/05/25(水) 06:45:59ID:PVpWgcdf
[過去ログ] 3 of 4

part21 http://pc2.2ch.net/php/kako/1047/10479/1047980851.html
part22 http://pc2.2ch.net/php/kako/1050/10503/1050369328.html
part23 http://pc2.2ch.net/php/kako/1053/10530/1053051519.html
part24 http://pc2.2ch.net/php/kako/1054/10549/1054992610.html
part25 http://pc2.2ch.net/php/kako/1056/10567/1056730690.html
part26 http://pc5.2ch.net/php/kako/1059/10590/1059043704.html
part27 http://pc5.2ch.net/php/kako/1060/10608/1060808783.html
part28 http://pc5.2ch.net/php/kako/1063/10635/1063562491.html
part29 http://pc5.2ch.net/php/kako/1066/10662/1066286828.html
part30 http://pc5.2ch.net/test/read.cgi/php/1069846177/
0006nobodyさん2005/05/25(水) 06:46:54ID:PVpWgcdf
[過去ログ] 4 of 4

part31 http://pc5.2ch.net/test/read.cgi/php/1072896288/
part32 http://pc5.2ch.net/test/read.cgi/php/1075545279/ (タイトルに31と誤記)
part33 http://pc5.2ch.net/test/read.cgi/php/1078076768/
part34 http://pc5.2ch.net/test/read.cgi/php/1081148490/
part35 http://pc5.2ch.net/test/read.cgi/php/1085557731/
part36 http://pc5.2ch.net/test/read.cgi/php/1089779036/
part37 http://pc5.2ch.net/test/read.cgi/php/1093106507/
part38 http://pc5.2ch.net/test/read.cgi/php/1097158988/
part39 http://pc5.2ch.net/test/read.cgi/php/1101522903/
part40 http://pc5.2ch.net/test/read.cgi/php/1106816922/

part41 http://pc8.2ch.net/test/read.cgi/php/1110383236/(前スレ)
0007nobodyさん2005/05/25(水) 06:50:07ID:???
ム板Perlスレより

[プログラミング自体の経験が無い奴はまずココを読め]
Perlプログラミング講座: http://www5a.biglobe.ne.jp/~n_rieko/perl/

[本]
リャマ: http://www.oreilly.co.jp/BOOK/lperl3/
駱駝: http://www.oreilly.co.jp/BOOK/pperl3v1/
Effective Perl: http://www.ascii.co.jp/books/detail/4-7561/4-7561-3057-7.html
クックブック: http://www.oreilly.co.jp/BOOK/pcook/

[オンラインマニュアル]
Perldoc.com: http://perldoc.com
perldoc.jp: http://perldoc.jp
perl5.005_03 のドキュメント: http://www.kt.rim.or.jp/%7ekbk/perl5.005/

[モジュール]
CPAN.com: http://search.cpan.org/
河馬屋二千年堂: http://member.nifty.ne.jp/hippo2000/

[テクニック]
Perlメモ: http://www.din.or.jp/~ohzaki/perl.htm
Perlのページ: http://homepage1.nifty.com/nomenclator/perl/
0008nobodyさん2005/05/25(水) 06:53:48ID:???
関連スレ

正規表現道場@2ch Part4
http://pc8.2ch.net/test/read.cgi/php/1105930285/

0009nobodyさん2005/05/25(水) 09:00:35ID:???
乙です。
前スレで教えてもらったperl講座
ttp://www.rfs.jp/sitebuilder/perl/
0010nobodyさん2005/05/25(水) 13:52:45ID:5tMlS9wk
バイト数ではなく文字数を得たいのですが、スマートな処理方法は
ございますでしょうか。

例えば「12345あいうえお」の場合、「15バイト」として数えるのではなく、
「10文字」として数えるようにしたく思っております。

ご教示いただけますと幸いです。
0011nobodyさん2005/05/25(水) 13:57:51ID:???
>>10
use encoding 'Shift_JIS'; # ソースのエンコーディングを指定する
print length('12345あいうえお');
0012nobodyさん2005/05/25(水) 17:26:48ID:???
>>11
ご教示有難うございます。
しかしながら先方のサーバはバージョンが5.6みたいで、
使用できませんでした。

とにかく即レス有難うございました。
0013nobodyさん2005/05/25(水) 18:39:06ID:kwD9lRlX
初心者なので、無知ゆえの行動を取っているかもしれませんが、指導お願いします。
長文ですが、よろしくお願いします。

1つのページに560個程度の項目があります。これをCGIで管理したいと考えています。
項目はチェックボックスx2、テキストx1、テキストエリアx2が90行と日付等に利用している
チェックボックスとテキストが数個です。

現在、自分で何とか改造できる更新記録系CGIを改造してどうにかしようとしています。
ただ、1つ問題があります。が…
560個もの項目(変数)を、表示ルーチンのsplit時の変数羅列や書き込み時のline(pushの時に利用してるもの)
に並べても大丈夫なのでしょうか?

さっき、変数を手打ちするのが大変だと思いエクセルののオートフィルを利用し変数をCSV出力し1行にしたら
PerlEdtiorが途中でフリーズとなってしまいました。

ソフトの限界があるのかもしれませんが、これで限界があるようだと、CGI上でも動作しないのでは?
と考えてしまします。あまり1行が長いとまずいということでしょうか?

1行でどうにかしたいのには訳があります。
>項目はチェックボックスx2、テキストx1、テキストエリアx2が90行
と先ほど書きましたが、この更新は1行ごとではなく、ランダムで何十行かまとめてする必要があるので、
1行ごとに「更新ボタン」とするのではなく、全部まとめて「更新」としたいからです。
もちろん、この考えに誤りがある場合、指摘してください。

そこで、1つ考えたのが、ログファイル・split時の変数羅列や書き込み時のlineを改行できないのか?と思いました。
これがOKなら問題解決しそうなのですが、ダメでしょうか?
splitで読み込み時に改行があるとまずいとかあるのでしょうか?

ログやsplit時の変数羅列が長すぎてはダメ、でも改行は出来ると言う場合は↑の問題まで教えていただけるとありがたいです。
0014132005/05/25(水) 18:40:25ID:kwD9lRlX
↑の続き。
もし、1行でダメで改行もダメな場合、質問の続きを書き込みます。
よろしくお願いします。
0015nobodyさん2005/05/25(水) 18:48:13ID:???
> 1行ごとに「更新ボタン」とするのではなく、全部まとめて「更新」としたいからです。
一行ごとに複数回更新処理したらいいんでは?そういうことじゃない?

> PerlEdtiorが途中でフリーズとなってしまいました。
それはそのエディタがしょぼいだけ、とか。

そもそも、なんで560個もの変数が必要となるのかがさっぱりわからん。

0016nobodyさん2005/05/25(水) 19:25:13ID:VuzyXB/A
在宅でphpのお仕事あります
[email protected]
までメール下さい
0017nobodyさん2005/05/25(水) 19:34:15ID:10kxLICF
以前一度質問した内容ですが、よろしくお願い致します。
全部で11個のCGIから1つのデータファイル(テキスト)を参照させている
のですが、最近そのデータが消えることがあります。そのデータファイルは現在、
1500くらいのレコードがあり、追加書き込みができます。データが消えると
いうのは、1〜20レコードがすっぽり消えていたり、レイアウトがずれたりも
します。
 以前の質問時には、ファイルロックを書き込みできるCGIのみ記述していた
ので、読み込みのみのCGIにも記述すべきとのアドバイスを頂き、修正したの
ですが、再発してしまいました。
ファイルロックの記述は以下のような感じですが間違っているでしょうか?

if ( !open (ABC_OUT, ">$abc_file") ){
print "ファイル読み込みオープンエラー<BR>\n";
}
else{
eval{ flock(ABC_OUT, 2); };
(省略)

ファイルロックが機能しているか確かめる方法とかあるのでしょうか?
また、ファイルを掴んでいる人のPCがフリーズしたりしてファイルが壊れる
なんてこともあるのでしょうか?
0018nobodyさん2005/05/25(水) 20:21:45ID:???
普通のファイルロック

 ロック処理
   ↓
  書き込み/読み込み処理
   ↓
 ロック解除処理

>>17のファイルロック

 読み込み処理
   ↓
  ロック処理
   ↓
0019nobodyさん2005/05/25(水) 20:36:39ID:FbKjEBl3
my $hogehoge = new ABCD::Saitama;

my $st = $hogehoge->db->wakame('wake wakame');

↑
上のような文章が出てきたんですけど、これは何をしてるんでしょうか?
解説できるかたがおりましたら、教えてください。
また詳しい説明が載ってるHPがあったら教えてください。
0020102005/05/25(水) 20:37:07ID:???
いろいろ調べ、

my $jp = $args =~ tr/\x8e\xa1-\xfe/\x8e\xa1-\xfe/;
my $asc = $args =~ tr/\x20-\x7f/\x20-\x7f/;

$jp / 2 + $asc;

これでとりあえず文字数を数えられるところまではできたのですが、
この場合、記号だけがちゃんと数えられません。
例えば「"」ですと、4文字と数えられてしまいます。
頭悪いのでこれ以上解決まで至りませんでした。

ご教示いただけますと幸いです。
0021nobodyさん2005/05/25(水) 20:37:27ID:???
>>17
【Perl】ファイルロック(排他処理)について語ろう
http://pc8.2ch.net/test/read.cgi/php/1024795138/

http://www.tohoho-web.com/wwwperl2.htm#flock
0022nobodyさん2005/05/25(水) 20:40:47ID:???
>>20
Jcode.pmでもできるぞ。それも入ってないのけ?

$length = $jcode->jlength();
returns character length properly, rather than byte length.
0023102005/05/25(水) 20:49:01ID:???
>>22
残念ながら入ってませんでした。
本当に困ったものです。
ご教示有難うございます。
0024nobodyさん2005/05/25(水) 21:34:35ID:???
>>23
とりあえずシフトJIS限定で、

$jstr = '"12345あいうえお"';

print "$jstr = " . length($jstr) . "\n";

# SHIFT_JIS 2バイト文字を1バイト文字(j)に置換
$jstr =~ s/[\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC]/j/g;

print "$jstr = " . length($jstr) . "\n";

実行結果>"12345あいうえお" = 17
実行結果>"12345jjjjj" = 12
こんなん出ましたけど
0025nobodyさん2005/05/25(水) 22:09:41ID:10kxLICF
>>18
ファイルオープンの前にファイルロックしろということですか?
0026nobodyさん2005/05/25(水) 22:13:26ID:???
>>18 は何か勘違いをしている気がする。
0027102005/05/25(水) 22:44:16ID:???
皆様、ご教示有難うございました。

苦心の末、文字列計算ルーチンがなんとかできました。

sub char_count{
my $args = $_[0];

$args =~ s/\x0D\x0A|\x0D|\x0A//g;

my $ascii = '[\x00-\x7F]';
my $twoBytes = '[\x8E\xA1-\xFE][\xA1-\xFE]';
my $threeBytes = '\x8F[\xA1-\xFE][\xA1-\xFE]';

my @chars = $args =~ /$ascii|$twoBytes|$threeBytes/og;

return ($#chars + 1);
}

これでちゃんとカウントされます。
Perlの小技さんのサイトに救われました。

丸半日かかりましたが、明日の納期に何とか間に合いました。
皆様に感謝いたします。
0028nobodyさん2005/05/25(水) 22:44:56ID:???
>19
無理やり一言で言うなら、
ABCD::Saitamaのひとつである $hogehoge の要素 db への wakame('wake wakame')という関数の呼び出し。
チョー難しい。スレタイの通り「初心者」なら忘れるか丸暗記しろ。

いわゆる、オブジェクト指向的な書き方。
古いバージョンのPerlには存在しなかったものなので、載ってる書籍も少ない。
Perlが開発された当時にはオブジェクト指向という概念すら登場してなかったから無理も無いけど。
検索するときは「perl オブジェクト指向」あたりで検索するといい。

もし、Perlの他の部分はほとんど分かるがそれだけが分からないんだとしたら、巣立ちの時期。
そろそろ第二のプログラミング言語を学んでみる事をお勧めする。
文法上、それ以上難しい事はPerlには登場しないというのがひとつ。
加えて、Perl上でのオブジェクト指向の実装はかなり変なので、ただでさえ難しいオブジェクト指向の概念を初めて学ぶには結構キツい。
0029102005/05/25(水) 22:50:18ID:???
あ、Perlメモさんでした。

やはり神サイトです。
0030nobodyさん2005/05/25(水) 23:35:52ID:???
変数に格納してある文字列を、S-JISにして文字コードのまま扱いたいんですが、
何か方法はありますでしょうか。
検索してみても、文字コードを変換する方法ばかりHITするもので。
お願いします。
0031nobodyさん2005/05/26(木) 02:16:27ID:???
S-JISにして文字コードのまま扱いたい。って何?
具体例を示したほうがよろしいかと。
0032アップロードの質問2005/05/26(木) 02:16:50ID:???
ファイルのアップロードについて質問させて下さい。
送信内容の確認ページを挟みたくて、下記の様な流れで
作成してみました。

(2)確認ページから、最後の(3)登録処理ページへデータを渡す為に
(2)確認ページ側のformをenctype="multipart/form-data"
としてやり、
<input type="file" name="temp" value="$FORM{'temp'} ">
として、最初の(1)ファイル選択フォームからのファイルデータを
受け取れないかと思ったのですが、
セキュリティー上、type="file" にvalueは与えられないとの事。。。

確認ページを入れたい場合、どの様にしたら良いのでしょうか。
どうかご教授下さいませ。
0033アップロードの質問22005/05/26(木) 02:18:00ID:???
#(1)ファイル選択フォーム(regist_form.cgi)
<form method="post" action="./regist_form.cgi">
<input type="text" name="name" size="20">
<input type="file" name="temp" size="40">
<input type=submit name="regist" value="登録">
</form>

     ↓

#(2)確認ページ(regist_form.cgi)
$FORM{$name} = $value;
     ・
     ・
     ・
<form method="post" action="./regist.cgi" enctype="multipart/form-data">
<p>$FORM{'name'} </p>
<input type="hidden" name="name" value="$FORM{'name'} ">
<input type="file" name="temp" value="$FORM{'temp'} ">
<input type=submit name="regist" value="登録">
</form>
0034アップロードの質問32005/05/26(木) 02:18:42ID:???
     ↓

#(3)登録処理ページ(regist.cgi)

use lib './lib';
use CGI::Lite;
require 'jcode.pl';

$cgi = new CGI::Lite;
my $directory = './file';
mkdir $directory, 0777 or die $! unless (-d $directory);

$cgi->set_directory ($p_dir) or die &error('ディレクトリが存在しません');
$cgi->add_timestamp(0);
%data = $cgi->parse_form_data;
0035nobodyさん2005/05/26(木) 03:45:31ID:???
@array =(0,1,2,3);
$index= rand @array;
print $array[$index], "\n";
print "<BR>\n";print "<BR>\n";

配列の要素をランダムに取り出した時、
その要素を固定して留めるにはどうしたらいいでしょうか。
当たり前なんですが、更新ボタンを押すと要素が変化してしまいます。

こんな風に無理矢理別の変数に突っ込んでみようとしましたが
$array[$index]=$mem;
$memには何も記録されませんでした。
0036nobodyさん2005/05/26(木) 04:58:14ID:???
>>19
my $hogehoge = new ABCD::Saitama;
my $st = $hogehoge->db->wakame('wake wakame');

 を書き直すと

my $hogehoge = ABCD::Saitama->new();
my $tmp = $hogehoge->db();
my $st = $tmp->wakame('wake wakame');

 と同等、意味は

1行目の左辺: ABCD::Saitamaパッケージで定義されているnew関数を呼出す。
1行目のnew関数: ABCD::Saitamaパッケージと関連付けされたリファレンスを返す。
1行目の右辺: new関数の戻り値であるリファレンスを$hogehogeに代入。
2行目の左辺: ABCD::Saitamaパッケージで定義されているdb関数を呼出す。
2行目のdb関数: 何かのパッケージと関連付けされたリファレンスを返す。
2行目の右辺: db関数の戻り値であるリファレンスを$tmpに代入。
3行目の左辺: 何かのパッケージで定義されているwakame関数に引数を渡して呼出す。
3行目のwakame関数: 引き数を受け取って何かの値を返す。
3行目の引き数: この場合の引き数とは'wake wakame'という文字列定数のこと。
3行目の右辺: wakame関数の戻り値である何かの値を$stに代入。
0037nobodyさん2005/05/26(木) 05:05:38ID:???
>>36
あっ、左辺と右辺を書きまちごうたけど、まっいっか。
0038nobodyさん2005/05/26(木) 07:47:44ID:???
>>32
fileを指定できると他人のパソコンのファイルが勝手に引き出せるので無理
アップファイルをサーバにテンポラリとして保存しておき確認OKならそのファイルを使うようにする。
ただ確認画面で処理をやめられた場合にテンポラリファイルがゴミとして残るのでガベージコレクションみたいな処理が必要。
0039nobodyさん2005/05/26(木) 11:23:28ID:7fGLJWg9
すいません質問お願いします。
自分で作った掲示板で、書込み内容を修正しようとおもったのですが、
削除機能がついてないので、ftpでログをダウンロードして
書込み内容を修正してからアップロードしたら
きちんと表示されなくなりました。

ログの保存方法は
title<>name<>kakikominaiyou
title<>name<>kakikominaiyou
見たいな感じ記録して
読み込みは
open(LOG,"$logname");
@log = <LOG>;
for($i=0;$i<@log;$i++){
}
なのですが、
@log = <LOG>のところで一行づつ読み込めてないようなのですが
どこに原因があるのでしょうか?お願いします。
0040nobodyさん2005/05/26(木) 11:49:50ID:???
>>17
 まず open(ABC, ">") じゃなくて open(ABC, "+<") に変えるべき。

>>35
 >>37

>>39
 ヒント : $log = <LOG>; print $log; ってやったらどんな文字列が出る?
0041nobodyさん2005/05/26(木) 16:07:48ID:???
お願いします。

がらくたBOOKさんの「SiteHistory」を改造中です。
ttp://tinkle.cside.com/book/cgi/cgi.htm
項目をがらりと変えたのですが、どうもうまくいきません。修正しようとすると、一番上の行のカウンターだけ残して全ログが消えてしまいます。
とりあえず、修正サブルーチンは以下の通りです。
---------------------
sub edit3 {
if ($in{'pass'} ne "$pass") { &error("パスワードが違います"); }
# ログファイル読み込み
open (FILE, "$data") || &error("ファイルが開けません");
@data = <FILE>;
close(FILE);
# カウント退避
$count = shift (@data);
foreach $line (@data) {
($no,$coview,$name,$tel,$genre,$floor,$all,$fday_i,$sday_i) = split(/<>/,$line);
chomp;
if ($no eq $in{'edit_no'}){
$line = "$no<>$in{'coview'}<>$in{'name'}<>$in{'tel'}<>$in{'genre'}<>$in{'floor'}<>$in{'all'}<>$in{'fday_i'}<>$in{'sday_i'}<>\n";
}else {$line = "$no<>$coview<>$name<>$tel<>$genre<>$floor<>$all<>$fday_i<>$sday_i<>\n"; }
push(@new,$line);
}
# ログを更新
unshift(@renew,"$count");
open(OUT,">$data") || &error("削除処理を失敗しました");
print OUT @renew;
close(OUT);
&admin;}
-----------
どこが間違っているのでしょう?
0042nobodyさん2005/05/26(木) 17:09:45ID:???
それを丸投げって言うんだよ
0043nobodyさん2005/05/26(木) 17:27:51ID:???
思考を放棄したら人としておしまいですよ
0044392005/05/26(木) 18:44:15ID:7fGLJWg9
>>40
レスありがとうございます。
試してみたところ
書込み内容の改行のところで一行と扱われてしまっているようです。
なにかいい方法はないのでしょうか?

わかりやすく言うと
title<>name<>書込み内容の改行
書込み内容の途中
title<>name<>書込み内容

上記のように出力されてしまいます。
0045nobodyさん2005/05/26(木) 19:16:41ID:???
>>44
ログの改行コードの扱いを整理した方が良いと思う。
その掲示板の CGI やエディタや ftp クライアントなどが、
それぞれどんな改行コードを想定しているかとか改行コードを変換したりしてないかとか、
そういうあたりを。
0046nobodyさん2005/05/26(木) 20:31:30ID:???
>>44
つまり、ログに保存するとき、例えば、

my $str = "その書き込み内容の改行";
$str =~ s/\r?\n/<br>/g;

とかで改行タグを無くしなさい。
1行ごとにログ保存してる掲示板とかならみんなやってることだぞ。
0047nobodyさん2005/05/26(木) 20:33:06ID:3LXc6fmj
自サイト内アイテムを検索する場合の
検索システムのルーチンについて質問です。

1.検索結果と同じ数の変数を作り、
  検索結果をその変数に格納する
   ↓
2.1〜50件、または51〜100件までと表示する際、
  1の変数から取り出して表示する

という考え方で合ってますでしょうか。
0048352005/05/26(木) 21:40:41ID:4tEZgW2V
>40
すみません、どうして>37と書かれているのかわかりません
>37に書いてある事の意味は何となく理解できますが
難しすぎて応用の域に達しませんでした…。
0049nobodyさん2005/05/26(木) 22:25:58ID:???
>>48
 >>40
 > こんな風に無理矢理別の変数に突っ込んでみようとしましたが
 > $array[$index]=$mem;
 > $memには何も記録されませんでした。

 >>37
 > 左辺と右辺を書きまちごうたけど
0050nobodyさん2005/05/26(木) 22:28:55ID:???
>>47
ようわからんけどあってることにしとく。
0051nobodyさん2005/05/26(木) 22:45:13ID:???
【ゴールデンレス】
  ∩ ・∀・)∩∩ ´∀`)∩  このレスを見た人はコピペでもいいので
   〉     _ノ 〉     _ノ10分以内に3つのスレへ貼り付けてください。
  ノ ノ  ノ  ノ ノ  ノそうすれば14日後好きな人から告白されるわ宝くじは当たるわ
  し´(_)   し´(_) 出世しまくるわ体の悪い所全部治るわでえらい事です
0052352005/05/26(木) 23:12:36ID:Q34ppmGc
>49
>36を一生懸命よんでまっすたごめんなさい…できました
ところで、>35に付け加える感じなんですが

$tmp01 = "シュウマイ";
$tmp02 = "餃子";
$tmp03 = "食いてぇ〜";
@array = (01,02,03);
$index = rand @array;
my $mem = $array[$index];

これで、$tmp.$memのようにして
print "$tmp.$mem"\n";
$tmp01〜$tmp03の中身(シュウマイとか)を表示させたいんですが
やっぱりうまく行きません……どうしたらいいでしょうか?
0053nobodyさん2005/05/27(金) 00:32:30ID:???
>>52
$tmp01 = "シュウマイ";
$tmp02 = "餃子";
$tmp03 = "食いてぇ〜";
@array = ('01','02','03');
$index = rand @array;
my $mem = $array[$index];
print "${tmp.$mem}\n";
0054nobodyさん2005/05/27(金) 00:39:41ID:???
>>53
@array = qw"シュウマイ 餃子 食いてぇ〜";
print "$array[rand@array]\n";
0055532005/05/27(金) 04:39:59ID:OuNiDnY3
レスありがとうございます、いろいろなやりかたがあるのですね。
表示ができました。

それと、どうしても詰まってしまったんですが
スクリプト上で、${tmp.$mem}を$tmp01〜$tmp03と認識させて、
以降の処理に使いたい場合はどうすれば良いのでしょうか?

$tmp01 = "0";
$tmp02 = "0";
$tmp03 = "0";
@array = ('01','02','03');
$index = rand @array;
my $mem = $array[$index];

${tmp.$mem} = 1;
#$tmp01〜$tmp03に1を代入したい

printで表示させた時はうまくいったのですが、スクリプト上だと
${tmp.$mem}を$tmp01〜$tmp03そのものとは認識してくれなくて、ここで止まってます
${tmp.$mem}の結果を該当する$tmp01〜$tmp03にすり替えるには…?
0056532005/05/27(金) 05:03:41ID:???
勘違いしてました、できますよねちょっと寝てきます

ぎゃぼー
0057nobodyさん2005/05/27(金) 06:32:17ID:???
$tmp01〜$tmp03 を @tmp に変えれば use strict 下でも動いていろいろ楽だろうに。
何事も考え方一つだ! ・・・対位法でも学んでおくかい?
0058nobodyさん2005/05/27(金) 07:19:03ID:???
こんな書き方も出来るけど、お勧めできない。
my $tmp01 = "シュウマイ";
my $tmp02 = "餃子";
my $tmp03 = "食いてぇ〜";
my @array = \($tmp01, $tmp02, $tmp03);
my $index = rand @array;
my $mem = ${$array[$index]};
print "$mem\n";

いつも思うのけど、なぜ配列を使うのを嫌うのだろう。
0059アップロードの質問2005/05/27(金) 07:28:24ID:???
>>38
レスありがとうございます。

>fileを指定できると他人のパソコンのファイルが勝手に引き出せるので無理
なるほど、そういう事なのですか。。。そう言われればそうですよね。

>アップファイルをサーバにテンポラリとして保存しておき確認OKならそのファイルを使うようにする。
>ただ確認画面で処理をやめられた場合にテンポラリファイルがゴミとして残るのでガベージコレクションみたいな処理が必要。
やはり最初のsubmitで送信してしまわないといけないのですね。。。
ご指摘の通り、確認画面でやめられた時の「ゴミ」が気になっていたので
なんとか確認ページからのアップロード処理を出来ないものかと思っていました。

とりあえず、疑問はなくなりスッキリしました。
ありがとうございます!
0060nobodyさん2005/05/27(金) 14:45:20ID:???
use vars qw($A $B);

↑このvarsてのは何なのですか?
後qwとかqqとかもありますが、それについての詳細もお伺いしたいのですが
0061nobodyさん2005/05/27(金) 14:46:50ID:???
そうやってひとつひとつここで聞いていくつもりか?
0062nobodyさん2005/05/27(金) 14:55:18ID:???
>>60
 >>7
 あるいはぐぐればすぐでてくるっつ
0063nobodyさん2005/05/27(金) 15:11:30ID:???
>>61
はい。
0064nobodyさん2005/05/27(金) 15:17:51ID:???
>>63
さあ、はやく上司の愛想伺いに戻るんだ
0065nobodyさん2005/05/27(金) 15:18:50ID:???
>>63
最低限、>>1くらい読みなさい。

【投稿する際の注意】
質問するときは内容をよく吟味してから投稿してください。
「コマンドの意味がわかんない」とかはマニュアル見ましょう。
回答者さんは何でも屋じゃありません
0066532005/05/27(金) 15:55:26ID:???
>57
$tmp01〜$tmp03を@tmp('$tmp01','$tmp02','$tmp03')とまとめるという事でしょうか?

実は$tmpの01〜03以外にも、別の変数$soc01〜03があって
$tmp01の内容が$soc01に、$tmp02が$soc02に(以下略)…
対応している、という仕組みになってます
なので、数字だけ出して割り振ろうと考えてました。

配列を使うのを嫌うというか、有効な使い方がまだよくわからんとです…。
見てると多分効率悪いんでしょうね、ネットで調べながらやってるんですが応用は難しいです、

あ、>60は自分じゃないです
■ このスレッドは過去ログ倉庫に格納されています