トップページ⇒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;
■ このスレッドは過去ログ倉庫に格納されています