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

【Perl】初心者コーナー Part17

■ このスレッドは過去ログ倉庫に格納されています
0001 ◆Go4ZKngPGE 02/10/14 17:24ID:???
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

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

1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。

CGIだけど、なんか質問ある? Part 8
http://pc.2ch.net/test/read.cgi/php/1032704121/
参考書籍の話題は【Perl,CGI】参考書籍 第三版
http://pc.2ch.net/test/read.cgi/php/1030209573/
その他の雑多な話題は、【CGIに依存しないPerlの話題一般/Part2】
http://pc.2ch.net/test/read.cgi/php/1030548610/
スクリプトの改造依頼は 【 スクリプト改造工房 PART 5 】
http://pc.2ch.net/test/read.cgi/php/1028193595/

過去ログ、その他の役立ち情報は>>2-10あたりを見よう。
0545デフォルトの名無しさん02/11/04 22:55ID:???
>>544
文字コードが違うんじゃない。統一しないとまずいよ。
あと、FFFTPだったらバイナリ送信に汁が吉。
コード指定しとくと変換しちゃうからね。
0546nobodyさん02/11/04 23:01ID:???
>>545
よくわからない。詳細キボンヌ
初心者でスマソ。それともこれぐらいもわからないのならあきらめろという罠
ですか?
0547nobodyさん02/11/04 23:02ID:???
そうです
0548デフォルトの名無しさん02/11/04 23:17ID:???
>>546
第一さ、>>544の文章の読みにくさ、第二に、「うぷできない」って
物理的にアップできなかったのかどうか。ネタとも思える書き方。
漏れはさ、物理的うぷはできたが、動かそうとしたらうまくいかん
かったっていうことかとおもてレスしたんやけどな。

0549nobodyさん02/11/05 01:07ID:???
すみません、上手く説明できるか分からないのですが、
ご理解頂けたならご教授下さい。

変数$aには'あ'が入っており、
$a .= 'い'; を入れ、ログに記録します。
この時に時々、ログのデータが

あい

とならずに、

あ
い

と改行されて記録されてしまい、
データが壊れてしまう事で現在悩んでいます。
どうか助けて下さい。お願い致します。
0550nobodyさん02/11/05 01:27ID:???
>>549
肝心のログに記録する部分はどうやってるの?
0551nobodyさん02/11/05 01:35ID:???
>>526
遅レスだけどこれですっきりできたけどなぁ

chdir ($dir);
@name = glob("*");
foreach(@name) {
 if (-d) {push(@array, $_); }
}
0552nobodyさん02/11/05 01:41ID:???
あっすみません。

$DAT[$n] = "$nm,$pw,$a\n";
if(!open(OUT,">$nazofile")){ &error("ファイルに書き込めません。"); }
print OUT @DAT;
close(OUT);

という具合に記録してます。s/\n$//;などを$aに対して行っても、
効果が無くホトホト困り果てております。
更にログを見ると上記のように改行されているにも関わらず、
HTMLで見ると普通に$aの『あい』が改行されずに見える場合もあります。
普通は『あ』しか表示されないと思うのですが…。
0553nobodyさん02/11/05 01:49ID:???
>>552
s/\n$//; ではなく chomp したら?
0554nobodyさん02/11/05 02:05ID:???
あっそうなんですか?
一度chopを使ったら$aの中身が全て消えてしまって…。
chompはchopと同じように使えば良いのですか?
私、chompの使い方があまり良く分かっていないもので…。
chomp $a; と言う具合で宜しいのでしょうか?
0555nobodyさん02/11/05 02:56ID:???
>>552
それってたぶん同じファイルから@DATに読み込んでsplitしていろいろやったあと
元に戻して書き戻すっていう流れかな?
もしそうなら最初にファイルを読んだときに全行chompしてしまうのが手っ取り早い。
そのままsplitすると最後のデータだけ改行がついたままになってしまっていろいろ面倒だから。
憶測で書いたんで違ってたらスマソ。
0556nobodyさん02/11/05 02:57ID:???
chompは末尾にある改行コードを取り除く
chopは末尾1文字を取り除く
0557nobodyさん02/11/05 04:36ID:???
>>552
というかファイルロックしていないからでわ
0558nobodyさん02/11/05 04:57ID:???
しょっちゅうファイルを壊してくれる
アテにならないchompがちょと嫌い。

>>552
$param =~ s/^\s+//;
$param =~ s/\s+$//;
を試してみるのはいかが。
0559nobodyさん02/11/05 08:18ID:???
"$nm,$pw,$a\n";
を
"$nm,$pw,$a,\n";
こうする。
0560nobodyさん02/11/05 09:34ID:???
Perlの改行って\nで統一的に扱ってくれないんですか?(テキストモードで)
なんかWindowsで\x0d\x0aじゃないと上手くいかなかったような。
0561nobodyさん02/11/05 10:48ID:???
>>561
ココ?http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify
でもどこで使えばいいのかいまいちわかってない初心者な自分。
056255202/11/05 11:23ID:???
皆さん、ご指導有難うございました。
とりあえず教えて頂いた方法を試してみたいと思います。
本当にありがとうございました。
0563nobodyさん02/11/05 12:39ID:19J7tl02
zakzakがエラーだしてるわー(藁
0564nobodyさん02/11/05 13:23ID:???
今ttp://white.d51.net/yapw/yapw.cgi/RO_GPS.pmHP
に置いてあるPerlを動かそうと思い色々試しているんですが、質問があります。
Perlの勉強をしようと思い一週間でマスターするPerl for windowsという本を買い、
本に付いていたjperl for DOSを入れパス設定をすませPerlを実行できる環境は一応整ったんですが
上記のHPのPerlが動きません。もしかしてjperlでは動かないのでしょうか?
ActivePerlで動くとtopに書いてあるのですが、jperl,perl,ActivePerlの違いがいまいちわかりません。
どなたかご指導お願いしますm(_ _)m
0565nobodyさん02/11/05 13:34ID:???
>>564
動かないというのは、何かエラーが出たの? それだけじゃわかりまへん。
056656402/11/05 13:43ID:???
起動方法はrotoold.plファイルがあるフォルダに移動し、「jperl rotoold.pl」で起動という感じです。

確認のため再度行ってみたところ↓の分が表示されました。(先程までは何も起こりませんでした

KKCFUNC が組み込まれました.
マイクロソフトかな漢字変換 バージョン 2.51
(C)Copyright Microsoft Corp. 1992-1993
Can't locate IO/Select.pm in @INC (@INC contains: c:/usr
djgpp/lib/perl5/site c:/usr/djgpp/lib/perl5/site .) at r
BEGIN failed--compilation aborted at rotoold.pl line 3.
これは正常に起動していると考えてもokなのでしょうか?

ちなみに先程まではCドライブにrotooldフォルダを置いて起動していましたがDに移動してみたところ、この表示がでました
0567nobodyさん02/11/05 14:02ID:???
>>566
use Select; って行があると思うが、Select.pm ってモジュールを探し損ねてるんじゃ?
056856402/11/05 14:24ID:???
エディタでPerlファイルを開いたところuse Selectという行がありました。
Select.pmモジュールについてですがC:JPL5005\LIB\PERL5というフォルダにはいっているのを確認しましたが
モジュールを探し損ねてる場合どういった処置を行えばよろしいでしょうか?
0569&rlo;こんう&lro;02/11/05 16:04ID:???
test
0570nobodyさん02/11/05 16:26ID:???
しっつもーん!

undef $/;
や
$/="";
は便利だけど、

----------
みたいなものを読み取る時の区切りにする方法ってありますか?


あれば教えてください。
0571nobodyさん02/11/05 16:57ID:???
--------------------------------------
ファイルAの中に
require'ファイルBへの相対パス';
--------------------------------------
ファイルBの中に
require'ファイルBからファイルCへの相対パス';
--------------------------------------

と書いてあって、
ファイルAを実行した場合、
ファイルCが正常に読み出せる術ってありますか?
0572nobodyさん02/11/05 17:01ID:???
>.571
絶対パスで書けば即解決。
0573nobodyさん02/11/05 18:37ID:???
=~ s/\n//g;
=~ s/[\n\r]//g;

上は分かるのですが下の意味が分かりません。
これはどういう動作なのでしょうか?教えて下さい。
0574nobodyさん02/11/05 18:43ID:???
>>573
\n または \r をすべて削除
0575nobodyさん02/11/05 19:02ID:???
あ…すいません(汗
\rとは一体どういう働きをするのかお聞きしたかったのです。
聞き方が悪くてごめんなさい。
0576nobodyさん02/11/05 19:21ID:???
>>575
carriage return
0577nobodyさん02/11/05 19:25ID:???
>>575
改行コードは\rと\nが混在してるから両方取り除くって事だろ?
057857502/11/05 19:42ID:???
>>576さん、577さんありがとうございました。
なんかややこしく考えてたみたい。助かりました。
0579nobodyさん02/11/05 19:44ID:???
一時間おきにCGIを実行する方法ってありますか?
0580nobodyさん02/11/05 19:48ID:???
>>568
perl はモジュールのパスを @INC という配列で覚えている。
ここにお望みのパスが登録されていなければ、スクリプト上で
モジュールを読み込む前に、パスを加えてやればいい。

BEGIN { unshift @INC, 'C:/JPL5005/LIB/PERL5' }
use IO::Select;

これと同じ事は

use lib 'C:/JPL5005/LIB/PERL5';

でもできるが、当然 lib.pm が見つからなければエラーになる。

>>571
require もファイル名だけ指定すれば @INC から探してくれる。

require 'jcode.pl'; # パスを明示しない

ファイル B や C がライブラリかモジュールなのなら、
@INC に登録されているディレクトリに置くか、
上述のようにパスを示してやればいい。単に設定ファイルを
ロードするような目的なら、絶対パス指定を薦める。
058157002/11/05 20:16ID:???


私にもレスください


0582nobodyさん02/11/05 20:22ID:???
>>570


わかりません

0583rubyist@カラアゲうまうま02/11/05 20:28ID:???
$/="-------------------";
正規表現は指定できない。awkならできる。
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> awk >>> perl
0584nobodyさん02/11/05 20:34ID:???
あとでsplitじゃだめなのか?
0585名無しさん02/11/05 21:41ID:Bk/NbLLY
ruby最強ruby最強ruby最強ruby最強ruby最強ruby最強ruby最強
ruby最強ruby最強ruby最強ruby最強ruby最強ruby最強ruby最強
ruby最強ruby最強ruby最強ruby最強ruby最強ruby最強ruby最強
ruby最強ruby最強ruby最強ruby最強ruby最強ruby最強ruby最強
ruby最強ruby最強ruby最強ruby最強ruby最強ruby最強ruby最強
0586nobodyさん02/11/05 22:13ID:???
rubyって何?
0587nobodyさん02/11/05 22:18ID:???
ruby最強、でいいんだけど、根拠がないとね。
対応するソースとか機能の紹介してくれれば
比較のやりようもあるんだけど、全然教えてくれないし。
0588nobodyさん02/11/05 22:20ID:???
rubyってそんなにいいの?
興味はあるんだけどなかなか気がすすまない
0589nobodyさん02/11/05 22:33ID:FHcnSReB
教えてください
他のサーバーにあるライブラリをcgiに読みこませたいんですけど、
単に
require "http://www.〜省略〜/test.pl";
と書いても読めません。

読みこめる方法はないでしょうか?
よろしくお願いします。
0590鮎川02/11/05 22:35ID:???
1995 AA倶楽部
1995 BB軍
1995 CCを考える会
1998 DDの協力会
1999 EE観察の会
1999 FFに親しむ会
1999 GGを守る会
2000 HHを探る会
2000 IIネットワーク
-------------------
を下のようにしたい。
-------------------
1995 AA倶楽部,BB軍,CCを考える会
1998 DDの協力会
1999 EE観察の会,FFに親しむ会,GGを守る会
2000 HHを探る会,IIネットワーク
-------------------
そこで、イメージとしては

for $i (1995 1998 1999 2000){

@year=$i;
push @year $_;

}
print @year;

のようなリズムで書きたいですが、これ以上、手が動きません。

だれか私を助けてください。

0591 ◆hMJAPH9PWA 02/11/05 22:41ID:???
>>589
HTTPなりFTPなりで取ってこないと無理だよ。
素直にコピーしてください。

>>590
年をキーにしてハッシュを使うといいよ。
0592鮎川02/11/05 23:16ID:???
イメージとしてはこんな感じでしょーか?

while (<>){
($name,$year)=split /:/;
$years{$year}=$name;
}


for $year (keys %years){
print "$year",$years{$year},"\n";
}
0593nobodyさん02/11/05 23:35ID:???
わかった、Rubyは最強、AWKも良い。
さぁPerlの話に戻そうか。
0594nobodyさん02/11/05 23:46ID:+eUS3bf8
すいません、Perlにおける無名参照というのは、やっぱりプログラム終了までにundefで開放しなければいけないのでしょうか。

$ref=[];
$ref=1; <-何かで上書きして参照を抹殺
↓
メモリリーク?
0595nobodyさん02/11/05 23:50ID:???
>>594
Perlにメモリリークなんてあるのか?
そもそもCのようにメモリを操作することはできないんじゃ・・・
0596 ◆hMJAPH9PWA 02/11/06 00:22ID:???
>>592
イメージ的にはそうだね。あと一歩、あと1byteあればとりあえず動きそう。

>>594
ガベージコレクションがあるから問題ないよ。それがPerlのいい所。
059759402/11/06 01:50ID:???
ありがとうございます!安心しました。
とりあえず、”ガベージコレクション”を検索してキマッス!(;゚Д゚)
0598nobodyさん02/11/06 09:17ID:???



CPANってなんて読むのですか?




0599nobodyさん02/11/06 09:22ID:???
「こっぺぱん」
0600nobodyさん02/11/06 10:03ID:???
grepコマンドではなくて、
ワンライナーでperlのgrep関数を使いたい時って、どんな時ですか?





0601nobodyさん02/11/06 11:47ID:???
いらっしゃーい、Perlの「コーディング」で困ってる人のスレです。

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

1と3が無いと誰も答えられないよ。
良い回答は良い質問から。一緒に勉強しましょう。
0602nobodyさん02/11/06 12:11ID:???
しーぱん。
0603nobodyさん02/11/06 13:59ID:3zAQzaHu
すいません、突然ですが質問させてください。

$eigyou_jikan{'土'} = "09:00-13:00";
$eigyou_jikan{'月火水木'} = "09:00-19:00";
$eigyou_jikan{'金'} = "09:00-21:00";

こういった連想配列のkeyを曜日順にソートして
書き出すにはどうしたらよいでしょうか?

曜日順ソートルーチンを作ったほうがよいのでしょうか?
0604nobodyさん02/11/06 14:33ID:???
sendmailでメールを送ります。
宛先が存在しないとfromに設定したアドレスに failure notice とかいう
メールが自動で来ますよね。
こういう風にアドレスが存在しない時cgi側で判断するにはどうしたらいいんですか?
0605nobodyさん02/11/06 14:38ID:???
何行目かのどっかにあるファイルポインタを
行頭に持ってくるワザってないですかね。
0606nobodyさん02/11/06 14:42ID:???
>>603
曜日は数字のままにしておいて出力する時に文字に変換するとか
0607nobodyさん02/11/06 14:48ID:???
>>604
送ってみなくちゃ分からない。
よって不可能。
0608nobodyさん02/11/06 15:18ID:???
>>607
いえ、えっと、送ってみて、
エラーメールが来たかどうかを知る動作を知りたいのです。
0609nobodyさん02/11/06 15:33ID:???
複数のチェックボックスで、チェックしたモノの値は変数にどのように格納されてきますか?
0610nobodyさん02/11/06 15:39ID:???
>>609
実際に出力してみれば…
0611nobodyさん02/11/06 15:42ID:???
>>609
チェックボックスはそれぞれバリュー値が違うと思いますが。
0612莫迦02/11/06 15:49ID:???
>>610
してみました。&で繋がれて出てきました。

>>611
はい。同グループのチェックボックスの値はどうやって取り出すのかなーと思って・・・。
0613nobodyさん02/11/06 15:58ID:???
1グループに対して一個しか受け取れんのか?
データは届いてるんだから考えれば出来ることだろ。
何でもかんでも人に頼ろうとするな!
0614nobodyさん02/11/06 16:00ID:???
↑ここは初心者が人に頼りに来るスレですけど。
>>612
&でsplitして=でsplitしてハッシュに突っ込んでkeyで取り出す。
0615莫迦02/11/06 16:00ID:???
えーっと、それで、どうやって取り出しますか?
ひとつ考えたのは、データの受け取り時にname(=$key)が前の$keyと同じだったらなんかやって取り出す、
みなさんどうしますか?

>>613
そんな怒らないでくださいよ。最良の方法はなにかなーと思ってるだけですよ。
0616nobodyさん02/11/06 16:26ID:???
foreach $pair (@pairs){
 ($key,$value) = split(/=/,$pair);
 $value =~ tr/+/ /;
 $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
 $value =~ s/"/"/g;
 $value =~ s/</</g;
 $value =~ s/>/>/g;
 $value =~ s/\r\n|\r|\n//g;
 $value =~ s/\,/,/g;

 if($key eq "チェックボックスのname"){
   push(@checkbox_name,$value);
 }else{
   $FORM{$key} = $value;
 }
}
こうだったっけな、とにかくそれだけは取得する時にnameを見て別の配列に入れればよかったんだと思う。
0617nobodyさん02/11/06 16:34ID:???
つーか普通checkboxのnameはバラバラにする。同じにするのはradio。
同じグループ(複数回答可の選択式質問など)だとしてもnameをq1-1とか付ければ良いだろ。

Perlが録に出来ないのならHTMLで工夫しろよ。
0618nobodyさん02/11/06 16:45ID:???
この程度のことで何故そこまでエラそうに出来るのか
やっと自分でもわかる質問が来たからここぞとばかりにしゃしゃりでましたって勢いだな
0619nobodyさん02/11/06 16:59ID:???
実際にCGIスクリプト書いたことがあれば、同じname使いたいことって良くある。
>>617は、Perl使ったこと無いのがばればれです。
0620nobodyさん02/11/06 17:09ID:???
>>618-619 ハイハイ, 腐れチョンは日本語の勉強してから来いや。
0621nobodyさん02/11/06 17:12ID:7IPFijFP
PerlとCGIってどう違うんですか?
062262102/11/06 17:14ID:7IPFijFP
あ、IDチョトカコイイ
0623nobodyさん02/11/06 17:15ID:???
データをカンマで区切って保存しているのですが、
ローカル側では全データ読み込めるのにサーバー側では最後の行しか読み込めません。
何が原因なのでしょうか?
0624nobodyさん02/11/06 17:18ID:???
>>623
そのスクリプト書いてみ
0625nobodyさん02/11/06 17:22ID:???
>>623
改行コードの違いと見た。
でもソース見ないことには分からんな。
0626nobodyさん02/11/06 17:26ID:???
>>620
つけあがった態度しか取れない厨房はまず日本でのコミュニケーションの仕方を学んでおいで
>>621
CGIはperlに限らない
>>623
改行コードでしょうな
0627nobodyさん02/11/06 17:28ID:???
>>626 お前がつけあがってる。
0628nobodyさん02/11/06 17:33ID:???
オマエモナー系のレスが飛びだしてる様は人種の特徴を絵に描いたようだねぇ。。
0629( ̄ー ̄)y-.。o○02/11/06 17:36ID:???
この板はさつばつとしておりやがりますねぇ。
0630nobodyさん02/11/06 17:38ID:???
>>619
初心者のみなさんはこんな真似はしないようにね。
スクリプトをちょっとだけ省略できるかもしれないけど、
チェックボックスはnameが違うことが重要な意味を
持つので、これを同じにして後で困るのは非常に
おばかさんのすることですよ。
0631nobodyさん02/11/06 17:38ID:???
【Perl】厨房コーナー Part 1
0632nobodyさん02/11/06 17:40ID:???
>>630=617?
>>617の厨房度は置いといて、>>630には同意。
0633nobodyさん02/11/06 17:59ID:???
>>608
たとえMX引いてあて先のSMTP直接たたいた場合でも、そこからさらに転送している場合などは
送ってみなけりゃわからない。
063461902/11/06 18:09ID:???
>>630
http://www.w3.org/TR/html401/interact/forms.html#checkbox
を読んでください。
英語が読めないなら
1つのFORM内で多くのcheckboxが同じcontrol nameを共有してよいと書いてあります。
0635nobodyさん02/11/06 18:09ID:???
>>630にはほぼ同意だが、同じ名前を持つこと自体は禁止されてない。
CGI::では名前がぶつかるとリストで格納していたと思ったが、今確認できる状況に無い。
063661902/11/06 18:17ID:???
1つのnameに複数のvalueを持たせるときにcheckboxを使うんであって、
1つのnameに1つのvalueだったらradiobuttonがあります。
0637nobodyさん02/11/06 18:27ID:???
「してもよい」と「するべき」は全く違うことが分からない人がいるな。
063861902/11/06 18:42ID:???
>>637
本当に複数選択の場合に一個一個、別のnameつけてるんですか。
意味がないというか、よけい無駄な処理が増えるだけのような気がするんですけど。
同じnameにした方がすっきりするので私は好きです。
0639(´ー`)y━~~02/11/06 18:54ID:???
ひとりで騒いでるPerl初学者がいるスレはここですか?
0640しつこくてスマソ02/11/06 19:00ID:???
CGI.pm のマニュアルだと、
> @turned_on = $query->param('group_name');
で、同じ name のチェックボックスの値を取れる
と書いてあります。

cgi-lib.pl だと、"\0" で区切られるんだっけ?
0641x02/11/06 19:03ID:???
普通かどうかはわからないが、name 同じにして論理和でやったほうがやりやすい

と思うな。 値を2の巾乗にしてさ。
0642nobodyさん02/11/06 19:15ID:???
>本当に複数選択の場合に一個一個、別のnameつけてるんですか。

場合による。君みたいに一方的に決め付けるのは危険すぎる。
0643nobodyさん02/11/06 19:17ID:???
HTML 4.01 勧告読んで由
0644nobodyさん02/11/06 19:24ID:???
なんかw3cが、、、HTMLの勧告が、、、とか本題からズレてるんですが。

最初の質問者は受け取り方分からないんだからname別々にすりゃいいんでねぇの?
■ このスレッドは過去ログ倉庫に格納されています