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

【Perl 】初心者コーナーPart6

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001undefさん2001/07/26(木) 00:40ID:???
初めて来た方、初心者はまずこのスレッドから始めよう。
尋ねる前に同じ質問がないかこのスレや旧スレ、及び>>2のリンクを一通り見てみよう。
案外答えはもう書かれているかもしれない。
0801名無しさん@お腹いっぱい。01/09/02 18:23ID:YqVc4g/k
>>800
ありがとうございました。
CSSのほうは読んでくれました。
でもまだjavascriptのほうが動きません。
<script language=\"JavaScript\" src=\"***.js\">
</script>\n"
これではまずいでしょうか?
0802名無しさん@お腹いっぱい。01/09/02 18:28ID:H3IIufEo
>801
板違いカエレ!
http://tohoho.wakusei.ne.jp/js/write.htm#jsfile
0803名無しさん@お腹いっぱい。01/09/02 18:37ID:YqVc4g/k
>>802
language=\"javascript\"が悪かったみたいですね。
これが書いてあっても、CGIで書いたのではないHTMLでは
ちゃんと参照してくれるんですよ。

帰れといいつつ、javascript質問スレではなく、目的のページにリンク
してくれていて、親切ですね。ありがとう。
0804名無しさん@XEmacs01/09/02 23:20ID:.hTQgQWM
#!/usr/bin/perl

use DBI;
use strict;
use CGI;
use Date::Calc qw(Today Add_Delta_Days);

#パスの設定
my $nkf = '/usr/local/bin/nkf';

#オブジェクトの生成
my $q = new CGI;

#出力文字コードの設定
open HTML, "|$nkf -s";
select(HTML);
$|=1;

#html表示
print $q->header(-expire=>'now');
print $q->start_html(-title=>'bbs',-bgcolor=>'#DDDDDD');
print "掲示版";
print $q->hr;
print $q->start_form(-method=>'POST',-action=>'./bbs2.cgi');
print $q->textarea(-name=>'msg',
-rows=>3,
-column=>16);
print "<br>\n";
print $q->submit(-name=>'submit',-value=>'submit');
print $q->end_form;
print $q->end_html;
close(HTML);
0805名無しさん@XEmacs01/09/02 23:24ID:.hTQgQWM
804みたいに書いて掲示版作ろうとしたんだけど、
日本語で掲示版とブラウザ表示しようとすると
internal server erorがおきます。
perl -c bbs2.cgi
では、
Global symbol "$B7G" requires explicit package name at bbs2.cgi line 22.
bbs2.cgi had compilation errors.
といわれるので、文字コードがおかしいみたいなんですが、
どうしたらなおりますか?
0806名無しさん@XEmacs01/09/02 23:25ID:.hTQgQWM
ちなみにこれはi-mode用の掲示版をつくってみてるんですが、
パソコンのブラウザで表示しようとするときに起こるエラーです。
i-modeはためしてません。
0807名無しさん@XEmacs01/09/02 23:33ID:.hTQgQWM
さらに
open HTML, "|$nkf -e";
としても結果は同じです。
0808名無しさん@お腹いっぱい。01/09/02 23:34ID:q3o1psmo
>>806
@@ -19,7 +19,7 @@
#html表示
print $q->header(-expire=>'now');
print $q->start_html(-title=>'bbs',-bgcolor=>'#DDDDDD');
-print "掲示版";
+print '掲示版';
print $q->hr;
print $q->start_form(-method=>'POST',-action=>'./bbs2.cgi');
print $q->textarea(-name=>'msg',
0809名無しさん@XEmacs01/09/02 23:37ID:.hTQgQWM
本当だ。できました。なぜですか?
0810初心者2号01/09/02 23:40ID:rbOW5x.6
皆さんこんにちは。
がいしゅつかもしれませんが、教えてください
入力フォームで電話番号など半角数字の入力のみに限定させたいのですが、
どうしたらいいでしょうか?
0811名無しさん@お腹いっぱい。01/09/02 23:42ID:H3IIufEo
>>810
if($tel =~ /\D/){&error('半角数字のみです');}
0812名無しさん@お腹いっぱい。01/09/02 23:52ID:q3o1psmo
>>809
多分元のスクリプトは JIS Code で書いているかと思うのですが
問題なのは「掲示板」という文字列がバイト列としてどう表現
されているかという事です

> echo '掲示版' | nkf -j | hd

とかすれば分るかもしれませんが, 「掲示板」をバイト列レベルで見ると
$B7G と見なせる部分が含まれるので " で囲まれてると変数を展開しようとして
エラーになります

別解として元のスクリプトを EUC に変換しても大丈夫だと思います
0813名無しさん@お腹いっぱい。01/09/03 01:42ID:3oz.BmnQ
かちゅしゃログ→dat変換スクリプトを作りたいのですが、
$line =~ s/,/<>;/g;
$line =~ s/<b>//g;
$line =~ s/</b>//g;
をして、外部へのリンクは<a>タグを外して
自スレリンクの<a href="http://saki.2ch.net/test/read.cgi?bbs=
ana&key=988911584&st=7&to=7&nofirst=true" target="_blank">
を<a href="../test/read.cgi?bbs=
ana&key=988911584&st=7&to=7&nofirst=true" target="_blank">
という風にしたいです
どのように書けばよいでしょうか
0814名無しさん@お腹いっぱい。01/09/03 01:49ID:W9dhAgAc
>>813
$line =~ s/<a href="http:\/\/saki\.2ch\.net/../g;
$line =~ s/<a href="http.*?">//g;
とここまで考えて</a>の削除を忘れてたことに気付いた。
スマン。
081581401/09/03 02:02ID:W9dhAgAc
>>814
しかも間違えてるし・・・。
$line =~ s/<a href="http:\/\/saki\.2ch\.net/<a href="../g;
$line =~ s/<a href="http.*?">//g;
0816pp01/09/03 05:49ID:LMjVYZAM
h
0817test01/09/03 06:55ID:EfBvrGB.
test
081881301/09/03 22:38ID:XIk6iDJI
$lines[$i] =~ /<a href="(http:.*?)"/;
$url=$1;
$lines[$i] =~ s/<a href="http.*?<\/a>/$url/g;
解決しました
0819名無しさん@お腹いっぱい。01/09/04 01:34ID:jaQVJtkg
htmlファイルを取得するスクリプトを書いているのですが。。。
ファイル取得部分は人様のものやこちらのスレッドなどを参考にしてなんとか出来たのですが、

もし(たとえば hoge.html)をすでに取得していた場合
旧hoge.html→hoge.html.1
とりネームする、しかし hoge.html.1 がすでにある場合は hoge.html.2 にする
その後どんどん、.3 , .4 , .5 と増やしていく
という処理をしたいのですが書き方がわかりません
やりたいことはもし更新されていても消さずに残しておきたい、ということです

教えていただけるとうれしいです
0820 ◆GpSwX8mo 01/09/04 03:27ID:uLaYbm/k
>>819

#!/usr/bin/perl

use strict;

use constant BACKUP_LIMIT => 5;
use constant FILE_NO_SEPARATOR => '.';

my $html_file = 'hoge.html';

my $received_htmlstr = '<!DOCTYPE html ...';

if (-e $html_file) {
my $oldest = join(FILE_NO_SEPARATOR, $html_file => BACKUP_LIMIT);
unlink $oldest if -e $oldest;

for (my $i = BACKUP_LIMIT-1; $i>0; --$i) {
my ($before, $after) = map join(FILE_NO_SEPARATOR, $html_file => $_), $i, $i+1;
next if not -e $before;
rename $before => $after;
}
rename $html_file => "$html_file.1";
}

use IO::File;
IO::File->new($html_file, 'w')->print($received_htmlstr);

__END__
0821 ◆k4PcAe16 01/09/04 03:27ID:uLaYbm/k
>>819

#!/usr/bin/perl

use strict;

use constant FILE_NO_SEPARATOR => '.';

my $html_file = 'hoge.html';

my $received_htmlstr = '<!DOCTYPE html ...';

sub max { my $max = shift;
foreach (@_) {
$max = $_ if $max < $_;
}
return $max;
}

if (-e $html_file) {
my $file_format = qr/^\Q$html_file\E\.([1-9]\d*)$/;

require IO::Dir;
my $max_idx = max map { /$file_format/o; $1 } grep /$file_format/o, IO::Dir->new('.')->read;

for (my $i = $max_idx; $i>0; --$i) {
my ($before, $after) = map join(FILE_NO_SEPARATOR, $html_file => $_), $i, $i+1;
next if not -e $before;
rename $before => $after;
}
rename $html_file => "$html_file.1";
}

use IO::File;
IO::File->new($html_file, 'w')->print($received_htmlstr);

__END__
0822820,82101/09/04 03:31ID:uLaYbm/k
名前欄に #1, #2 と入れたら妙な文字が出てしまった。なんだろ?
082381901/09/04 03:41ID:jaQVJtkg
>>822 (820,821)
さっそくレスいただいて恐縮です
わかりやすく教えていただいてうれしいです ありがとうございました

>名前欄に #1, #2 と入れたら妙な文字が出てしまった。なんだろ?
----------------
1 名前:ひろゆき ◆NdKrQ0UM 投稿日:2001/08/09(木) 16:26 ID:OLqDn5LQ
というわけで、名前欄に#をいれて適当な文字列を入れると、
ひとりキャップが使える機能を足してみました。

ほえほえ#password
って感じです。

4 名前:ひろゆき ◆NdKrQ0UM 投稿日:2001/08/09(木) 16:32 ID:OLqDn5LQ
キャップがなくても、本人であるという証明になりますです。
----------------
という機能らしいです
ひとりキャップ 略して 「トリップ」と呼ばれているようです
0824pp01/09/04 04:11ID:BE/ASauk
すいません。
今、Active Perlをインストールして
早速拡張子.plにして、いろいろやろうかと
思っていたのですが、.plをダブルクリックすると
コマンド画面が出てきて、すぐに消えてしまいます。
これはなぜでしょうか?
問題無くインストールしたのですが・・・
0825名無しさん@お腹いっぱい。01/09/04 04:55ID:oDOAY7oI
>824
MS-DOSプロンプト開いて、コマンドラインで
perl hoge.pl
とか打つべし
0826pp01/09/04 05:08ID:BE/ASauk
>>825
わざわざレスどうもです。
コマンドまたはファイル名が違います
と、なってしまいます。
082782501/09/04 05:17ID:oDOAY7oI
>826
それperl.exeにパスが通ってないと思うんだけど
もしかしてpathの設定方法とか知らなかったりする?
だとすると説明が面倒なんで俺はパス(←笑うところ)
0828pp01/09/04 05:21ID:BE/ASauk
>>827
pathの設定方法知らなかったりします。
取り敢えず、検索してみます。
わざわざ有難う御座います。
0829結城杏奈01/09/04 08:43ID:WtCIi7QQ
ちょっと聞いてもよいかしら
ファイルをおコピーしたいんですけど出来るだけシステム依存
したくないのですわ。
`cp hoge hoe`なんてやるとゲイシなPCだとおキック喰らっちゃって
大変ですわよ
システムコールせずにファイルコピーする関数なんていうのは
ありませんかしら?

open (IN,"<hoge");
open (OUT,">hoe");
  while (<IN>){
  print OUT $_;
  }
これってなんだか田舎娘みたいでとってもアンニュイですの。。。。
0830名無しさん@お腹いっぱい。01/09/04 08:56ID:MBD3zVhI
>>829
ネカマは死んで。
0831名無しさん@お腹いっぱい。01/09/04 08:58ID:btJZCxgM
お前コード書くのかよっ! と言っておく  w
0832名無しさん@お腹いっぱい。01/09/04 09:02ID:SH4sstc2
いちお、File::Copyてなモジュールがありますがね。。。
use File::Copy;
copy("hoge", "hoe");
そのソース見ると、最初にシステム見分けてから、
それぞれ最適な関数(もちシステム依存ばりばり)を
呼び出してるつうしろものでっせ。
都会派のネカマちゃんにはお気に召さんかもな。
0833pp01/09/04 09:04ID:BE/ASauk
Windowsで普通にActivePerlをインストールすると
hello.pl をダブルクリックで
DOS窓起動→hoge.plが起動→hoge.pl終了→DOS窓終了→一瞬で窓閉じる
ってのはどうやったら、直るのでしょうか?

MS-DOSプロンプトのプロパティの
プログラム終了時にウィンドウを閉じる
のチェックは外しているのですが・・・
0834結城杏奈01/09/04 09:58ID:WtCIi7QQ
>>830 まー!
>>831 (ぽっ
>>832
ありがとうですの、なるべくシステムコールしない
&&標準モジュールをつかうなら田舎娘の出番になるのね
なんて中途半端なのかしら! やですわ
病的折衷主義のガラクタ出力機ですわ
でもそんなperlちゃんが楽しいですの。
かさねがさね感謝ですわ。
>>833
その問題はわたくしが通うバッキンガム高校のBBSでも
いつも書き込まれてますのよ。
わたくしは NTりすと ですけどDOSでの移動が面倒でしたら
さぎょうフォルダのうえで
explorerから右クリックでコマンドプロンプトを開く
と言うのはいかがかしら? 窓の手なんかにそう言う設定
があったとおもいますのよ。
あとはDOSのヒストリ機能なんてのを使うとちょっと便利ですわ
一度dirとかにゅうりょくした後にF1を押していくとよいですの
doskeyなんて検索すると、もうちょと便利かもですわ
0835名無しさん@お腹いっぱい。01/09/04 17:52ID:cTMkgC.w
板違いかもしれませんが
現在LinuxMLD5でperlをやっているのですが
最初の行にちゃんとした#!/usr/bin/perlといれているのですが
うまく実行されません。
which perlとかでやってもちゃんとあってるし、perl -vとかでも
インストールされていることが確認できます。
今はしかたなく実行前にプログラムの前にperlといれてやっていますが
面倒で仕方ありません。
これってどうやったら動作するのでしょうか?動かない原因が特定できません。
どなたか助けてください。
0836名無しさん@お腹いっぱい。01/09/04 18:02ID:LkqU29Ks
実行権限がないんだろ。
0837_gunzip01/09/04 18:31ID:E8XEZJvU
chmod +x script_name.pl
./script_name.pl
^^
0838名無しさん@お腹いっぱい。01/09/04 20:31ID:FOQJEj12
ねかまにちょっとワロタ 。。 病的折衷主義って何だっけか
>>835
同じく chmod 755 ./scriput_name.pl
0839名無しさん@お腹いっぱい。01/09/04 20:33ID:FOQJEj12
_gunzipたんおひさっ
Rubbish Lister か。。。   sage
084083501/09/04 21:50ID:2Iq0qb32
>chmod 755 ./scriput_name.pl
だめでした。
777でもだめでした。
何が原因なのでしょうか?
0841名無しさん@お腹いっぱい。01/09/04 22:05ID:FOQJEj12
何か変な文字コードなんじゃないの?
#!/usr/local/bin/perl --
↑ 一行目こうしたらどうなる?
0842名無しさん@お腹いっぱい。01/09/04 22:50ID:cFEUOiVA
っていうか、どんなエラーでてるんよ?
0843p01/09/05 04:33ID:sTSRf1BY
Missing braces on \N{} at C:\PERL\COPAL186\copal.tmp line 342, within string

↑すいませんがどう言う意味か教えて下さい。
0844名無しさん@お腹いっぱい。01/09/05 05:10ID:L1KgWH9s
>843
「"\N"の後にあるべきブレース記号が書いてねーぞ」と言われておる。
\N{hoge}はギリシャ文字なんかを出すためのエスケープシーケンスらしい。
詳しくはperldoc charnameを参照。
ていうかそんなもん使ってんの?"\n"のタイプミス?
0845p01/09/05 06:07ID:sTSRf1BY
>>844
申し訳ないです。解決しました。
わざわざレスどうもです。
0846名無しさん@お腹いっぱい。01/09/05 10:21ID:.KHO7txo
>>845
どう解決したか書かんかい(*゚Д゚)ゴルァ!
0847名無しさん@お腹いっぱい。01/09/05 11:37ID:wcZpsAAM
たぶんうまくギリシャ文字が出せたんだろう
0848名無しさん@お腹いっぱい。01/09/05 12:51ID:zxq1XBSQ
聞き捨て君ばっかだな、何だコイツら???
0849名無しさん@お腹いっぱい。01/09/05 12:55ID:MuDbSDcw
 あー礼言えとか逝ってんじゃねえよ、結果を書けっつてんの
同じような奴見てるかもとかは考えね訳??
それとも自分が分かった事は重要機密にしてえのか? w
まーどうでもいいや
0850名無しさん@お腹いっぱい。01/09/05 13:38ID:JJ49xIDw
ロックファイルを作るスクリプトを色々と書いているのですが、
以下のスクリプトだと『タイムアウト』が出力されません。
for文内のelse以下に別のif文として書くときちんと出力されるのですが・・・。
なぜなんでしょう?
この文だと『$lockfileがあって、なおかつ$maxが0なら』ということになるのか
な?うーん。混乱してきた。

$lockdir = "./lock";
$lockfile = "$lockdir/lockfile.txt";
$min = "0";

for ($max = "5"; $max >= $min; --$max) {

if ( -e $lockfile ) {

sleep(1);
print "$max\n";

} elsif ($max == "0") {

print "タイムアウト\n";
exit;

} else {

open(FILELOCK, ">$lockfile");
close(FILELOCK);
exit;
}

}
0851名無しさん@お腹いっぱい。01/09/05 14:00ID:ORFkPfok
>>850
>} elsif ($max == "0") {
ここじゃないかな?
0852名無しさん@お腹いっぱい。01/09/05 14:47ID:qCTwY1FI
$lockdir = "./lock";
$lockfile = "$lockdir/lockfile.txt";
$min = "0";

for ($max = "5"; $max >= $min; --$max) {
if ( -e $lockfile ) {

sleep(1);
print "$max\n";

if($max == "0"){

print "タイムアウト\n";
exit;
}
} else {

open(FILELOCK, ">$lockfile");
close(FILELOCK);
exit;
}

}
085385101/09/05 14:52ID:ORFkPfok
>852
うわ、ちゃんと見てなかった。
すんまそん。
0854名無しさん@お腹いっぱい。01/09/05 15:13ID:jJXUOw7Y
>>850
if-elseは、条件一致したらそれ以下のブロックを飛ばすでしょ。
今のif-else文だと、$lockfileがあって$maxが0の時(タイムアウトと出力したい時)は
一番はじめのifブロックで終わってしまってる。
085572501/09/05 16:17ID:r9VXJuCk
WebProg板の方々のおかげでだいぶんPerlの
謎が解けました。ありがとうございます。
そこで、また教えていただきたいことがあります。

たとえば、
-- a.pl
$val1 = 'イッテヨシ';
$val2 = 'オマエモナー';

-- b.pl
#!/usr/bin/perl
require './a.pl';
print "$val1\n$val2";
exit 0;
とすると

イッテヨシ
オマエモナー

という出力結果が得られます。ところが、use strict;を使って、
-- a.pl
my $val1 = 'イッテヨシ';
my $val2 = 'オマエモナー';
-- b.pl
#!/usr/bin/perl
use strict;
require './a.pl';
print "$val1\n$val2";
exit;
とするとエラーになってしまいます。どこが間違っているのでしょうか?
多分 my で局所変数宣言しているので、a.pl内で定義した変数が外に
出られないのだとはおもうのです。
他にやり方がある、または無いのでしょうか?
ご教授お願いします。
0856名無しさん@お腹いっぱい。01/09/05 16:33ID:69W8SPrg
-- a.pl
sub itteyosi {
my $val1 = 'イッテヨシ';
my $val2 = 'オマエモナー';
return ($val1,$val2);
}
1;

-- b.pl
#!/usr/bin/perl
use strict;
require './a.pl';
my @val = itteyosi();
print "$val[0]\n$val[1]";
exit;
0857( ・∀・)y━~~ 01/09/05 21:58ID:MQF/.FlQ
a.plの方ではmyを使わず、b.plの方で
use vars qw($val1 $val2);
ぢゃだめですか・・・?

今のperlなら
our ($val1,$val2);
かな。。

my使えないけど、myはそういうものだとあきらめておいらは深追いしていません。
085883501/09/05 22:11ID:MH.oUUAs
>#!/usr/local/bin/perl --
>↑ 一行目こうしたらどうなる?

bash : ファイル名 : command not found
と出ます。
0859名無しさん@お腹いっぱい。01/09/05 22:43ID:sW4ruaF.
>>857
外部ファイルから取り込むのは定数なんだろうから、

-- a.pl
use constant VAL1 => 'イッテヨシ';
use constant VAL2 => 'オマエモナー';
1;

--b.pl
use strict;
BEGIN { require './a.pl'; }
print VAL1."\n".VAL2;

って感じがいいと思うよ。
単純にダブルクォートに入れられないのは不便かもしれないけど。
0860名無しさん@お腹いっぱい。01/09/05 22:59ID:do.WshJo
ん?
そりゃパス間違えてるよ、つか -- を付けろって言ってるんだろ
後、出来たように見えて本当は7**になってないとか
-rwxr-xr-x こうなってるか?
実は/usr/bin/perl5 だったとか
とりあえずcatでもviでも良いからLinuxで書いてみ
プロンプトで cat >hoe.pl ってやって、

#!/usr/bin/perl
print "test";

これだけ入れる、終わったら Ctrl+z で終了。
chmod 755 ./hoe.pl
./hoe.pl
これで動かなきゃしらない。
0861名無しさん@お腹いっぱい。01/09/05 23:35ID:ZkxQdk2c
ホレ!http://chiba.cool.ne.jp/gedouhobby/
086283501/09/05 23:41ID:O0y3PBhM
>860
やっぱりダメでした。
お手上げです。何が原因かすら不明…
0863名無しさん@お腹いっぱい。01/09/05 23:46ID:EuQ8BRvI
とりあえず、>>835によると合ってるらしいが
$ which perl
の結果を書いてみ。念のため。
0864名無しさん@お腹いっぱい。01/09/05 23:58ID:niWMGH6k
>>835
それより、どんなエラーメッセージなのかを・・・・
0865名無しさん@お腹いっぱい。01/09/06 00:10ID:jxYvqj8.
Linuxつかえんなら大人しくWin使えよ。
0866名無しさん@お腹いっぱい。01/09/06 00:17ID:4627I8LA
if ($ENV{'REQUEST_METHOD'} eq "POST"){
read(STDIN, $commandline, $ENV{'CONTENT_LENGTH'});
} else {
$commandline = $ENV{'QUERY_STRING'};
}

どうみても普通のアレなんですけど。。。

method="GET"だと$commandline は取れるのに、
method="POST" にすると$commandline に文字列が入りません。

なんでGETだと取れて、なぜPOSTだと取れないのでしょうか?
同じところでずっとはまっています。
何か悪いところがないでしょうか?よろしくお願いします。
086785001/09/06 00:43ID:ESQY.pDM
>>854
なるほど!

if文は評価式が真なら実行文を実行して終了し、偽なら実行文は実行せずに
elsif文を評価するということですね。逆に言えばif文が偽にならないとelsifは
評価されない・・・。

ありがとうございました。
0868名無しさん@お腹いっぱい。01/09/06 00:58ID:lkkYIUpY
use strictが使えないです・・。なんで?アパッチ入れないとやっぱだめ?

win98/ActivePerl/Httpd
0869名無しさん@お腹いっぱい。01/09/06 01:11ID:UxFZPp2o
>>868
そもそも「use strict;」が何なのかを学ぶと良いと思われ。
0870名無しさん@お腹いっぱい。01/09/06 01:30ID:4E8AwmEc
>>855

通常、そういうことをしようとするときは、Exporter を使う。

# a.pm
package a; use base Exporter; @EXPORT = qw($val1 $val2);
$val1 = 'イッテヨシ'; $val2 = 'オマエモナー'; 1;

# b.pl
use a; print "$val1\n$val2";

>>855 >>857

my を使った変数をエクスポートする時は
*global = \$private;
とすると、実質 $private はレキシカルでなくなることを利用してimport を自分で書けば一応可能…かも?
というのも、??? の行を消すとなぜかうまくうごかなかったから。

# a.pm
package a; @EXPORT = qw($val1 $val2);

my $val1 = 'イッテヨシ'; my $val2 = 'オマエモナー';

sub import {
my $c = caller;
my @tmp = ($val1, $val2); # ???
foreach my $e (@EXPORT) {
my ($prefix, $e_sym) = ($e =~ /^([\$\@%*&]?)(.*)/); $prefix = '&' unless $prefix;
*{$c.'::'.$e_sym} = eval "\\$prefix$e_sym"; die $@ if $@;
}
}
1;

(改行が多すぎるらしいため、つめて書いてます)
0871名無しさん@お腹いっぱい。01/09/06 01:35ID:lkkYIUpY
>>868
なんなのかは知ってるけど、仕様の依存性とかのデータが見当たらないんですよぅ。
0872名無しさん@お腹いっぱい。01/09/06 04:57ID:ugAsC9SM
>>871
いやね、「Apacheがないせいでuse strictが使えない?」みたいなことを
書かれた時点で、こいつわかってんのかと思っちゃったりするわけですよ。
ま、そんなのはどうでもいいんだけど、
use strictが使えないって具体的に何がだめなん?
087383501/09/06 09:51ID:0KMUTKPI
原因が判明しました。
スクリプトを/usr/binにもっていってperlのあるところで実行すると大丈夫でした。
perlのあるところでしか実行できないところをみると
perlのパスが通ってないみたいです。
こんなこと初めてです。一応検索してはいるのですがそれらしきものにヒットしません。
どうすれば解決するんでしょうか?
0874名無しさん@お腹いっぱい。01/09/06 10:16ID:cEL2v6yw
>>873
多分違わないか?
835 で which perl や perl -v が期待した動作をしたと書いているの
だから perl が PATH の通ったところに無いとは思えないのだが
単純にスクリプトの起動のさせ方が間違ってると思うのだが
shell 上からスクリプトをどうやって実行させてる?
スクリプト名を hoge.pl (command prompt を >) として

> hoge.pl

で実行させようとして無いか?
0875名無しさん@お腹いっぱい。01/09/06 10:27ID:MMkqxmBg
./hoge.pl
087685701/09/06 11:01ID:uCOK.3Ds
>>870
そーゆーふーにやるんだ。今度から使うよ。ありがと〜ヽ(´ー`)ノ

後半のは、良く分からないし、やっぱプライベートな変数を外に出すのは不自然ってことで、気にしないで置きます。
多分>>855も想定しているのは定数だけを記述したファイルを用意したいのだろうし。
それでも外に出したい時は、Getほげほげ関数作ったほうが楽そうですからね(;´∀`)

>>859も、やりかたとしては勉強になりました。
が、""の中に入れられないのは痛い。。。
0877725(=855)01/09/06 11:15ID:rIfbk0F2
>>856 >>857 >>859 >>870

どうもありがとうございました。
教えていただいた方法でやってみます。
0878名無しさん@お腹いっぱい。01/09/06 12:00ID:WXMJq9Po
>>858
#! /usr/bin/env perl
でも同じでしょうか
0879名無しさん@お腹いっぱい。01/09/06 12:35ID:I8HVXYHg
要素数が同じ配列が2つあって、その内容が同じかどうか調べたいんですけど、
今は
if ((join "\t", @a) eq (join "\t", @b)){
  なんか処理
}
ってやってます。
各要素にタブ文字を使っていなければこれで十分ですか?
if ($a[0] eq $b[0] && $a[1] eq $b[1] && ...
は見にくいからあんまりやりたくない・・・・
0880名無しさん@お腹いっぱい。01/09/06 13:35ID:cGMUUJcs
>>879
十分と思われます。ただ、配列のサイズがでかいと巨大な文字列が
生成されることになるので、一個一個調べたほうがいいかもね。

for ($i=0; $i<=$#a; $i++) {
unless($a[$i] eq $b[$i]) { 違ってた場合のなんか処理; }
}
0881名無しさん@お腹いっぱい。01/09/06 14:29ID:6hy8D4ok
>>879
順番も一緒か調べたければ
if ("@a" eq "@b") {
hogehoge;
}
が一番簡単かも…。ちなみに要素が同じかどうか調べるなら、
joinする前にsortする必要あり!
0882名無しさん@お腹いっぱい。01/09/06 14:33ID:8PdBtivg
それじゃ
('aaa', 'bbb') と ('aa', 'abbb') が
一緒になっちゃう
0883名無しさん@お腹いっぱい。01/09/06 14:35ID:813rKJ7s
join($;, @a) eq join($;, @b)
が少なくともスペースやタブよりはましかと。
0884名無しさん@お腹いっぱい。01/09/06 14:38ID:4d/uz2yQ
>>882

要素にタブが含まれない配列のタブで結合するんだから大丈夫だべ。
088588201/09/06 14:43ID:8PdBtivg
882は嘘だった。知ったかぶりスマソ。
0886725(=855)01/09/06 15:20ID:rIfbk0F2
>>876

>多分>>855も想定しているのは定数だけを記述したファイルを用意したいのだろうし。

そうです、その通りです。
a.plの変数をb.plとc.plで共有したいなぁと考えていたのです。
教えの通り、hoge.pm作って、use hoge;で上手く行きました。
ありがとうございました。
088787901/09/06 15:51ID:I8HVXYHg
みなさんありがとうございます。
ちょっと調べたら、>>883 の通りに join $; , @a; の方がいいみたいですね。
文字列は結合後でも500bytesくらいだから大きすぎってことはないと思いますが
joinよりいい案ってあんまりないですか?
0888名無しさん@お腹いっぱい。01/09/06 19:00ID:lOmO3j1c
fork で生成出来る子プロセスの最大数はいくつでしょうか?
ウチの環境(Windows2000 + Active Perl v5.6.1)ではデフォルトで64なのですが、
これはOSまたはperl処理系の仕様上の上限なのですか?
それとも、再定義でもすれば増やせるのでしょうか?
0889888ゲット!01/09/06 19:04ID:lOmO3j1c
↑
あ、同時に、という意味です。
0890core01/09/06 19:36ID:n.BZs/nc
今Linuxでperlやってますが実行するときに必ず
./hogehoge.plというように./をつけないとうまく機能しません。
./をつけなくても機能するようにはできないでしょうか?
使っているのはRedHatLinuxでperlは5.6です。
0891名無しさん@お腹いっぱい。01/09/06 19:53ID:gTPPtJlU
>>890 このスレでPerlスクリプトがうごかねぇって騒いでた人?
0892ひまぢん01/09/06 19:59ID:ji/LQ9h6
takoが怪しいからちょっとミラーしてみたよ。
他にも良いスレ探して適当に置いとくんでよろ
>>890
パスを通すってやつ、bashだっけ?の.profile辺りをいじるべし
検索すればFAQごろごろ、但しセキュリティー上よろしくないのでよろ

Part1
http://www.angelfire.com/ak5/2ch-web-program/kako/957208980.html
Part2
http://www.angelfire.com/ak5/2ch-web-program/kako/971817087.html
Part3
http://www.angelfire.com/ak5/2ch-web-program/kako/979894521.html
Part4
http://www.angelfire.com/ak5/2ch-web-program/kako/984430156.html
Part5
http://www.angelfire.com/ak5/2ch-web-program/kako/988728069.html
0893$PATH01/09/06 20:01ID:7zClg5yE
DOS窓じゃないんだから諦めな
0894名無しさん@お腹いっぱい。01/09/06 20:06ID:8PdBtivg
Slackwareだとデフォルトで「.」が$PATHに入ってた。
(root以外の場合ね。)最近インストールしてビクーリ
したよ。というわけで >>890 はSlackwareに乗り換え
を推奨。
0895名無しさん@お腹いっぱい。01/09/06 20:49ID:hH7VhveI
>>888
ActivePerlでperldoc perlforkを見たら、forkの最大数は
システムのいろいろな制限で上限が決まる、とかなんとか書いてあったよ。
WinNTだとスレッドの最大数が64て制限があったかもしれない。
0896名無しさん@お腹いっぱい。01/09/06 21:43ID:???
# vi ~/.bashrc

PATH="$PATH":.

# source ~/.bashrc
089788801/09/06 22:12ID:lOmO3j1c
>>895
ドキュメント見ました。
perlのみでの変更は出来そうも無いですね。
ありがとうございました。
0898名無しさん@お腹いっぱい。01/09/07 04:45ID:???
>>892 過去ログアップ乙カレー。
新スレ立てるときに参考リンクに入れましょー。
0899超超初心者01/09/07 10:08ID:24e7eVxc
Perlの超超初心者です。
今やりたいことはUNIX環境上にあるファイルを開いて半角カタカナを
全角カタカナにしようとすることです。
そういう質問はこちらで聞いても構わないでしょうか?

またもし過去ログに同質問があったらごめんなさい。
過去ログ見たのですが、なかったように見えましたので.....。
レスお待ちしてます。
0900名無しさん@お腹いっぱい。01/09/07 10:24ID:???
>>899
http://www.din.or.jp/~ohzaki/perl.htm#JP_HK2ZK
この辺。
0901初心者01/09/07 12:25ID:pn62mP8w
Perl初心者です。

ある変数に入っている文字列が「全角カタカナ」のみという
正規表現の書式を教えてください。

「全角ひらがな」はいろいろと検索してでてきました。
$hoge =~ /(?:\x82[\x9F-\xF1])/
でした。
レス数が900を超えています。1000を超えると表示できなくなるよ。