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

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

レス数が900を超えています。1000を超えると表示できなくなるよ。
0001nobodyさん2006/07/27(木) 17:04:23ID:???
Perlのコーディングで困ってる人のスレです。

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

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

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

過去ログやお勧めサイトは >>2-10
0809nobodyさん2006/09/01(金) 18:44:03ID:???
で、質問したやつはどこ行った?
08107942006/09/01(金) 20:03:39ID:???
失礼しました。。。。
皆様方のお力で、無事解決致しました・・・ orz
本当にありがとうございました・・・。 orz
0811nobodyさん2006/09/02(土) 22:53:43ID:???
チェックボックスについての質問です。

ページを表示させるさいに
デフォルトのチェックボックスはチェックした状態にしておき、
チェックボックスのチェックを外してsubmitするとチェックオフ。
またチェックしなおしてsubmitでチェックした状態に戻る。

というプログラムを作りたいのですが

print "<input type=\"checkbox\" name=\"test\" value=\"checked\" checked />";
と書いてしまうとチェックを外してsubmitしてもまたチェックされた状態で表示されてしまうし
print "<input type=\"checkbox\" name=\"test\" value=\"checked\" $test />";
こういうふうに書くと最初に表示したときにチェックがされてない常態になってしまいます。

どういった処理の仕方をすればうまくいくのでしょうか。
0812nobodyさん2006/09/02(土) 22:59:18ID:???
エスケープうざいから print qq{}; とか使えよ。。。(´・ω・)

<input type="submit" name="submit" value="submit" />
として、name=submit の値がなく、test がなかったらチェック、submit の値があったら ノーチェック、でいいんじゃない?
0813nobodyさん2006/09/02(土) 23:10:37ID:???
正規表現の説明を見ているときに「ゼロ幅表明」という言葉が出てきていたのですが、
どのような意味でしょうか。

検索してはみたのですが
「成功か失敗を返す、繰り返し使うべきでない」
のような説明でよく分かりませんでした。
08148112006/09/02(土) 23:26:42ID:???
>>812
おお!出来ました!どうもありがとう。

というか<input type="submit">にもnameつけることが出来たんですね。
htmlの勉強からやり直してきます。
0815nobodyさん2006/09/02(土) 23:37:41ID:???
半角のスペース「 」とマッチさせたいのですが・・・。
0816nobodyさん2006/09/03(日) 00:09:56ID:???
>>813
ゼロ幅表明自体が分からないという事?

ゼロ幅表明の、単語境界(¥b)とか、直前のマッチ位置(¥G)とかは、
マッチングはするけど、¥w, ¥d とかと違って文字幅が無い。
マッチングが成功しても、注目している文字の位置は変わらない。

繰り返し使うなっていうのは、
位置を変えずにいくらでもマッチできるから(/¥b¥b¥b¥b¥b/)
オートマトンの注目位置が動かなくて非効率って事だと思う。

説明あまり良くないかも知れないけど、多分そんな感じ。
0817nobodyさん2006/09/03(日) 00:53:10ID:???
>>816
丁寧な説明ありがとうございした。
0818nobodyさん2006/09/03(日) 06:31:32ID:???
>>815
半角空白をはじめとする空白文字 (Perl の正規表現で言うところの /\s/ にマッチする各文字) はデフォルトでは正規表現のメタキャラクタではありません。
パターン中にそのまま書けばそのままそのものとして解釈されます。

というかこの程度は既に自力で解決してそうね。
0819nobodyさん2006/09/03(日) 06:49:55ID:???
>>815
もし解決してなかったら、どうぞ。

/ /;
0820nobodyさん2006/09/03(日) 14:12:46ID:???
日本語以外で書かれたメッセージを排除したいと思っているんだけど、

厨な俺だと日本語かどうかを判別する方法って、
if($hogehoge !~ /\W+/) { エラーメッセージ表示のサブルーチンへ }
しか思いつかない。
もう少ししっかり日本語を判別できる方法ってある?
0821nobodyさん2006/09/03(日) 14:20:55ID:???
正規表現でマルチバイト文字が含まれているか調べるとか
0822nobodyさん2006/09/03(日) 16:08:59ID:???
CGIをいじっていたら、サーバーではエラーは出ず正常表示されるものの、
うまく動かない(予期しない動作に)状態になってしまいました。

そこで、デバッグしようと思うのですが、
ロギングするようなライブラリはないでしょうか。
printfデバッグを助けてくれるようなものでよいのですが。
0823nobodyさん2006/09/03(日) 16:16:07ID:UFgEMuAo
とりあえず、これ発見したので使ってみるす
http://d.hatena.ne.jp/rainydaidoh/20060702
0824nobodyさん2006/09/03(日) 16:19:06ID:UFgEMuAo
log4perlってのもあるんんすね。
でも、日本語の情報すくねーヽ(`Д´)ノ ウワァァン!!
http://search.cpan.org/~mschilli/Log-Log4perl/
0825nobodyさん2006/09/03(日) 17:05:04ID:???
Data::Dump
0826nobodyさん2006/09/03(日) 17:32:35ID:UFgEMuAo
>>823
getTime();がないって言われる・・・

>>825
マニュアルないすか?
0827nobodyさん2006/09/03(日) 23:40:40ID:FWwio3vA
質問です、お願いします。
perlにて中規模サイトを構築しようとしているのですが、オブジェクト指向で
作りたいと思っています。
その時にクラス(パッケージ)間で共通して使いたい変数をどう扱えばいいのか
が分かりません。
イメージとしては
use vars qw( '$dbh' , '$conf' );
のような感じで、パッケージのどこからでも参照できる方法があれば教えて下さい。

やはり名前空間を越える事は出来ないのでしょうか
0828nobodyさん2006/09/03(日) 23:50:49ID:???
オブジェクト指向をパールで学ぼうとするのは無謀じゃないだろうか
0829nobodyさん2006/09/03(日) 23:51:00ID:???
>>827
オブジェクト指向とか言う前に、Perlの基本を勉強した方が良いよ
0830nobodyさん2006/09/04(月) 00:10:36ID:???
> qw( '$dbh' , '$conf' );

これはないなwww
0831nobodyさん2006/09/04(月) 00:13:49ID:???
>>828
Perlはほんの少しの小細工でOOPを実装してるから、入るだけなら逆に易しいと思うよ。
ハッシュリファレンスくらい理解してる必要があるけど。
0832nobodyさん2006/09/04(月) 00:18:45ID:kGmJ+csQ
てゆうか、出来るのこれ?
パッケージのどこからでも参照できる方法
0833nobodyさん2006/09/04(月) 00:31:17ID:???
わからんな。
「$パッケージ::hoge」 とかじゃだめなの?
0834nobodyさん2006/09/04(月) 00:41:37ID:???
質問者さんが Module 化するという前提の基なら、

$ cat Foo.pm
#!/usr/bin/env perl
use Exporter ;
use vars qw( $foo $bar @ISA @EXPORT );
@ISA = qw( Exporter );
@EXPORT = qw ( $foo $bar );
$foo = $bar = 1 ;
1;

$ cat var.pl
#!/usr/bin/env perl
use Foo ; # ライブラリパスは通せよ
print $foo . $bar . "\n" ;

という風な感じでアクセス変更可能。
同一ファイル内だったら use varsもしくは our したうえで
$Foo::foo にアクセスする事ができるはず。
0835nobodyさん2006/09/04(月) 00:45:21ID:???
>>834
それ Foo.pm の1行目間違ってないか。
そこは #! じゃなくて、package だろ
0836nobodyさん2006/09/04(月) 00:52:53ID:???
ご指摘の通りパッケージ宣言が抜けてました orz...

$ cat Foo.pm
package Foo;
use Exporter ;
use vars qw( $foo $bar @ISA @EXPORT );
@ISA = qw( Exporter );
@EXPORT = qw ( $foo $bar );
$foo = $bar = 1 ;
1;
0837nobodyさん2006/09/04(月) 00:53:14ID:???
OO でやるということなら、パッケージ変数をエクスポートするのはちょっと微妙かも。
完全修飾名でアクセスさせるのが良い作法っぽい気がするよ。

また、どちらを選ぶにしてもドキュメントにその旨書いておくことを強く推奨。
0838nobodyさん2006/09/04(月) 01:05:41ID:???
どうせ、dbhとかだろ
シングルトンなConfig.pmとかでいいんでないの?
0839nobodyさん2006/09/04(月) 01:23:41ID:kGmJ+csQ
と言う事は設定を処理し定義するパッケージを用意し、
毎回ファイルごとに読み込む感じになるようですね。
なんか手間がかかるので正しい方法じゃないように感じていたのです。

こうゆう状況って絶対発生しますよね?

0840nobodyさん2006/09/04(月) 01:27:25ID:???
CGI+Perlという選択しておきながら、そんな事気にするのは矛盾。
0841nobodyさん2006/09/04(月) 01:35:30ID:kGmJ+csQ
それを言われると困りますね。
0842nobodyさん2006/09/04(月) 07:51:08ID:???
表を作っています。
セルが3×3で次の表ができるように組んでいるんですが、
最後の表が、9に満たない場合、空白セルで埋めるようにしたいと思ってます。

で、
$bはデータが存在した最終セルのセル個数+1です。

for($a = $b;$a/9 =~ /\./;$a++){
空白のセルを生成する内容
}

セルにふられたナンバーが9で割って小数点が含まれる場合、空白のセルを生成する、という形なんですが、
これだとfor構文にマッチしてないようです。

どこが問題なのでしょうか?
お教えくださいますようお願いします。
0843nobodyさん2006/09/04(月) 08:36:50ID:???
>>842
数値と文字列を混同してるからじゃないの?
普通は9で割った時に余りがあるかどうかで判断するだろう。

for($a = $b;$a % 9 > 0;$a++)

$bが+1されとるのもよく分からんが…。
0844nobodyさん2006/09/04(月) 08:41:19ID:???
>>843
ありがとうございます。
整数かどうかは%なんですね。
それがわからなかったから無茶苦茶な処理をしてました。

+1してる理由は、1セル目が0として計算されてるからでした。

本当に有難う御座いました。
0845nobodyさん2006/09/04(月) 10:41:57ID:???
>>844
>整数かどうかは%なんですね。
調べ直せ
0846nobodyさん2006/09/04(月) 10:53:00ID:???
>>845
はい
0847nobodyさん2006/09/04(月) 21:34:50ID:uUuOcfs4
>>837
Perl5.8以降についてくるFile::statとかがんがんExportしてるよ
とかよけいな事を言ってみる
0848perl初心者2006/09/05(火) 01:27:41ID:cFDKud4F
すいません、簡単なことを聞きたいんですけど、メールフォームの作り方を
学んだんですけど、その本には、sendmail.iniの設定を変える必要があると
のことですが、ホスティング(ロリポップやさくら)の場合、単に、
$sendmail = '/usr/sbin/sendmail';みたいな感じで設定して終わりでいいんでしょうか?
sendamil.iniをいじるのは、自分でサーバを持っているときとかのみですか?
0849nobodyさん2006/09/05(火) 02:33:24ID:???
わかんなかったら、まず試しに実行してみればいいと思うよ (´・ω・`)
0850nobodyさん2006/09/05(火) 02:55:37ID:???
>>847
ツッコミさんくー。
File::stat を見てみたら、デフォルトのエクスポートは関数オーバーライドだけだけれど、エクスポート可能な変数はたくさんあるね。
デフォルトではない (明示的に指定しなければインポートされない) ので、この文脈では問題ないんじゃないかな。
0851 ◆.PT9876/4U 2006/09/05(火) 20:00:39ID:???
当方, JavaScript なら多少 自信あり.
しかし perl は訳解りません.
そんなわけで基本処理は JavaScript でやることにして
log 書き込みだけを perl でやる hybrid 掲示板を作ってます.

んで, server が nifty なので logfile が cgi-bin にあると
Ajax の読み込みに失敗するようです.
なので "homepege" directory に logfile を置く必要があります.
perl で このようなことが可能でしょうか ?
(調べた限りでは このようなことをやってる CGI は見当たらないので)

もし可能なら ちょこっとアドバイスなど おねげぇ〜しますだ.
0852nobodyさん2006/09/05(火) 20:22:39ID:???
>>851
可能。
google: perl open
0853 ◆.PT9876/4U 2006/09/05(火) 20:25:58ID:???
>>892
おありがとうごぜぇ〜ますだ !
0854nobodyさん2006/09/05(火) 20:39:43ID:???
上のヒントで分かるかな。
open "path/to/homepege/logfile";
というように読み書きするファイルのパスを指定すればOK。
0855 ◆.PT9876/4U 2006/09/05(火) 20:56:15ID:???
>>854
ご親切にどうも ありがとうございます.
MacPerl で local check をやっている関係で
delimiter の違いが (思い違いの) 原因でした.
"できる" と解っただけで方向性が決まりました.

んで, (骨組みだけ) 無事成功しました !
0856nobodyさん2006/09/05(火) 21:03:50ID:???
>>855
またお前か。いい加減OSXにしろ。デリミタの違いなんて無くなる。
0857 ◆.PT9876/4U 2006/09/05(火) 21:12:27ID:???
>>856
申す訳ねぇ〜デスだ.
すれ違い気味に OS10.3 って今でも手に入ります ?
なんか, 10.4 の評判はいまいちみたいなので...
OS さえ手に入れば爺さんに鞭打って...
0858 ◆TWARamEjuA 2006/09/05(火) 22:45:29ID:????BRZ(6667)
ヤフオクあたりに転がっていそうな。。。>Tiger
0859nobodyさん2006/09/06(水) 01:12:56ID:???
TigerよりもPantherを欲しがるやつなんて初めて見た。
0860nobodyさん2006/09/06(水) 02:06:39ID:???
とりあえずnullはここに居つくなよ。
0861nobodyさん2006/09/06(水) 03:34:58ID:KUgOOpEJ
if( $d == -1 ) {
 return 0;
}
for( my $n = 0; $n < @w; $n++ ) {
 if( $w[$n] == $d ) {
  return $n;
 }
}
return -1;

これ↑と同じ処理を、1行か2行で書けないでしょうか?
0862nobodyさん2006/09/06(水) 04:11:01ID:???
>>861
return $d == -1 ? 0 : (@_ = grep { $_ == $d } @w) ? $_[0] : -1;

自分の分からないコードを書くと保守性が下がるよ。その点注意。
0863nobodyさん2006/09/06(水) 06:01:51ID:???
それだと >>861 の求める index が返ってこないよ。
まあ、grep 部分を grep { $w[$_] == $d } 0 .. $#w に
すりゃいいだけだけど。
0864nobodyさん2006/09/06(水) 10:55:39ID:???
ご迷惑をおかけします。

http://pc8.2ch.net/test/read.cgi/hp/1156837689/

Perl使いの皆様、どなたかこの板違いの馬鹿どもの議論を、
一言でサラリと解決してやってください。
初心者が質問しにくい状況になっていて非常に迷惑です。

論点は
『CGIファイル(CGIスクリプト)はプログラムであるか?』
ということらしいです。
これだけだと、答えが出しにくいかもしれませんが
よろしくお願いします。

前スレでCGI=プログラムと言い出していたものがいて、
それが尾を引いて、わけのわからない展開になっていますが、
どなたか解決を・・・
0865nobodyさん2006/09/06(水) 11:03:36ID:???
見たけど既に正解は出ているが誰も見ちゃいないので、馬鹿につける薬はないな。
いらん話を他スレに持ってくるな。
0866nobodyさん2006/09/06(水) 11:10:28ID:???
>>964
スルーしろ。
0867nobodyさん2006/09/06(水) 11:11:01ID:???
未来レスしちった。>>864ですた。
0868nobodyさん2006/09/06(水) 13:51:06ID:????BRZ(1002)
webprogよりレベルの低い板があったとは
0869nobodyさん2006/09/06(水) 16:18:30ID:???
あれ、ただの荒らしだから。
勿論反応してるのもね。
0870 ◆.PT9876/4U 2006/09/06(水) 18:25:28ID:???
>>860
召喚されてるように聞こえる...
それはさて置き, とりあえずマジレス.
ここで言うのもアレだけど perl って知れば知るほどアレルギー反応が...
要するに目的を達成するために しかたなくやってるだけで深く追求したくない.

したがって居座るつもりは さらさらありません.

さて, 結果報告 :
nifty は やっぱり だめぽ でした.
(XMLHttpRequest は "同一 domain" 限定で読み込みが可能.
nifty は見かけ上, 別サーバーのように見える)

そこで xrea で試したところ, どうにか動作はするように...
しかし あっしには理解不能なエラーが...
それでも back ボタンを押すと書き込めてるのですが...
作りかけで恥ずかしいのですがリンク貼っておきます.

alter.s225.xrea.com/hybrid/hybrid.html
0871nobodyさん2006/09/06(水) 18:37:42ID:???
だから同じドメインになるように >>854 みたいにしたんじゃなかったのかw
0872 ◆.PT9876/4U 2006/09/06(水) 18:52:15ID:???
>>871
思い違いかも知れないけど, 書きこみに失敗.
細かいところを作り込まなければならないので
あまり時間を浪費したくない.
そんな訳で深く原因追求してません.
0873nobodyさん2006/09/06(水) 20:09:46ID:???
>>870
nifty 特有の問題なら nifty のスレで聞くのがいいかも
0874nobodyさん2006/09/06(水) 20:36:10ID:???
>>870
エラーなんてでてないが? 直した? それとも、投稿後の画面遷移のこと?
だとしたら、JavaScript側でsubmitしてるんだから、画面遷移があるのは当たり前だろう。
どうせならform.submit()せずに、投稿もXmlHttpRequest使えばいいじゃん。何の為のAjaxなんだか。

Perlにアレルギー起こすのはいいが、JavaScriptも微妙だし、もうちょっとがんばれ。
0875nobodyさん2006/09/06(水) 20:40:12ID:???
追記。どうしてもformを使いたいなら、確かレスポンスとして 204 No Content を返すと
画面遷移をなくせたはず。
0876 ◆.PT9876/4U 2006/09/06(水) 21:07:08ID:???
>>873
どうもありがとう.
一応チェックしてますがテクニカルな話題は なさそうでふ.

>>873
print "Content-type: text/html \n\n";を
書き加えてエラーは出なくなりますた.

>JavaScript側でsubmitしてるんだから
>画面遷移があるのは当たり前だろう
よく考えれば当然なんですが見落としてました.

>投稿もXmlHttpRequest使えばいいじゃん
こちらは以前作ったサンプルを転用しました.
で, 書きこみの方は未研究です.
これでうまくいくのなら万々歳ですだ.

>確かレスポンスとして 204 No Content を返すと
さっそく調べて実験してみます.

本当に ありがとう !!!
0877nobodyさん2006/09/06(水) 21:47:22ID:???
そしてもう来るな
08788762006/09/07(木) 18:11:47ID:4yMYFWbI
>>875
色々やってみましたが, 何か勘違いしてるのか思い通りに行きません.

[やってみたこと]
1. print"Status:204 No Content\n\n";
2. print"Location:http://alter.s225.xrea.com/hybrid.html\n\n";
3. それぞれ一行空けてみたり...書きこむ場所を変えてみたり...

いっそ, 振り出しのファイルを読み込んで...
でも, やりかたが今ひとつわかりましぇ〜ん.

>>875
そんなに邪険にしなくても...
0879nobodyさん2006/09/08(金) 01:47:11ID:???
はじめまして。KENTスレから移動してきました。自分の日記やメモをつけるのに、
公開サーバではなくローカル・マシン上で、www.kent-web.com で配布されている
sunbbs を利用しています。このコードを眺めつつ、ちょくちょく改造しているの
ですが、投稿されたデータに http:// で始まる文字列があった場合、自動的に
その文字列にリンク・タグを追加してくれる auto_link という処理を見つけました。
<sample-1>
sub auto_link {
$_[0] =~ s/([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#]+)/$1<A HREF=\"$2\" TARGET=\"_blank\"><B>$2<\/B><\/A>/g;
}
これを応用し、同じく sunbbs 内のワード検索サブルーチンに、ヒットした検索
キーワード部分を色付きでマーキングする処理を作ってみました。
<sample-2>
sub auto_marker {
$_[0] =~ s/$word/\<font\ color=\"\#FF0000\"\>\<b\>$word\<\/b\>\<\/font\>/g;
}
これで「おおむね」期待通りの処理をしてくれるのですが、検索キーワードの中に、
ひらがなやカタカナの長音記号「ー」が含まれていると、記事はヒットするらしい
ものの、肝心の記事を表示してくれない、という問題に悩まされています。

ヒットする「らしい」というのは、検索結果:12件 などという結果だけはちゃんと
表示されるからです。

ちなみに、<sample-2>の処理を外すと、色付き表示は当然されないものの、ヒット
した結果はちゃんと表示されます。

このことから、自分が書いた<sample-2>の処理中に、この問題を引き起こす原因が
含まれているのではないかと判断しています。

どなたか「そこはこう書かなきゃダメじゃん」というご指摘をいただけませんでしょうか。
どうぞよろしくお願いいたします。
0880nobodyさん2006/09/08(金) 01:53:21ID:???
ちゃんと読んでないけど、バックスラッシュ入れ過ぎ。
置換後のテキストで "<", ">", "#", 半角スペース、ダブルクォートとかは、
バックスラッシュ入れなくていい。
0881nobodyさん2006/09/08(金) 02:31:26ID:???
s/$word/
↓
s/\Q$word\E/

とかじゃないの?
0882nobodyさん2006/09/08(金) 10:07:26ID:???
長音「ー」といえばUTF-8とS_JISの変換で失敗したことがある
08838792006/09/08(金) 18:17:53ID:???
>>881
どうもです。できました。感謝です。
しかしそれはどういう意味があるのでしょう?

あと検索キーワードが一つのときはきちんと動作しましたが、
複数のキーワードを半角スペースで区切って入れた場合、
結果は正しくヒットするけれども、赤マークはされませんでした。
スペース(%20)が邪魔をしているんだろうということは分かるのですが、
それ以上のことが分からないです。
0884nobodyさん2006/09/08(金) 19:14:56ID:???
>883
ぐぐれ
0885nobodyさん2006/09/08(金) 21:10:52ID:???
というか、kent のサイトのサポ板いった方いいんじゃね?
0886nobodyさん2006/09/08(金) 22:27:06ID:d2vLYLwU
アバウトな質問で申し訳ないのですが
フォームにフリーワードを入力させて
CSVのデータとマッチさせ、
マッチしたデータを表示させるCGIを
作成しようと思っています。

それで、yahooやgoogleのように
表示件数を○件毎という風にして、
画面の下のほうに
1 2 3 4 5 6 7 8 9 .....
と次の○件、という感じにしたいな
と考えています。

同じような仕様で、参考になるソースを
ご存知の方、居ませんでしょうか。。



0887nobodyさん2006/09/08(金) 22:59:58ID:???
>>884
横からですまないが、ググれないからいい検索単語ぷりーず
0888nobodyさん2006/09/08(金) 23:02:51ID:???
>>886
Data::Pager
HTML::Pager
etc.
0889nobodyさん2006/09/08(金) 23:11:11ID:???
見つかったので情報投下。
quotemetaと同じそうだ。
0890nobodyさん2006/09/08(金) 23:13:20ID:???
検索で得た件数を1ページで表示したい件数で割った数が総ページ数になる。
また、件数を割って得た数が割りきれなければ総ページ数を+1する

ってとこかなぁ
0891nobodyさん2006/09/08(金) 23:15:12ID:???
>>878
nph script
ステータスコードに頼るような内容じゃないと思うけど
0892nobodyさん2006/09/08(金) 23:44:38ID:???
ステータスコードの書き換え方法はCGI仕様に一応あるから
わざわざNon-parsed Headerする意図が(ry
08938862006/09/08(金) 23:55:47ID:d2vLYLwU
>>888
>>890
ご意見、ありがとうございます。
Data::Pager
HTML::Pager
ですか。恥ずかしながら始めてしりました。
勉強してみます。

最初は自分でロジックを考えて実装しようと
思ったのですが、案外難しいな。。と。

検索対象を全部HTMLソースに
吐き出して、DHTML + javasript で
表示の切り替えが出来ないかな。。なんて
ことも考えてます。
Perl経験あんまり無いので、無理にperl
で作るとソースがむちゃくちゃになりそうで。。
なやましい。。

0894nobodyさん2006/09/09(土) 01:22:33ID:???
>Perl経験あんまり無いので
ちなみに、経験があるのは何なの?
0895nobodyさん2006/09/09(土) 01:39:45ID:???
myについてなのですが、

たとえば

my $test = "soto";
my $a = 1;
if ($a) {
print $test;
}
とすればsotoが出力されますが、

my $test = "soto";
my $a = 1;
if ($a) {
my $test = "naka";
print $test;
}
print $test;
だとnakasotoと出力されます。

myはあるサブルーチンのなかのみでしか変数を使えないようにするというのが私の理解なのですが、
この場合はどういう処理がされているのでしょうか。
仮に{}でくくられた部分内でしか変数を使えなくするというのなら最初の例に合いませんし・・・

初歩的な事で申し訳ありません。
0896nobodyさん2006/09/09(土) 03:06:29ID:FjbM6rE4
rootで実行しているperlスクリプトから
 $filename = "filename.dat";
 chown www,GROUPNAME,"$filename";
としても反映されません。

ユーザ:root
グループ:wheel
でログインをした状態でコマンドラインから色々試してみたところ
自分自身のユーザ・グループ以外には変更できないのですが
www,GROUPNAME とするにはどのようにしたら良いのでしょうか。
0897nobodyさん2006/09/09(土) 03:06:37ID:???
>>895
「変数 スコープ perl」 でぐぐればわかるとおもう。
0898nobodyさん2006/09/09(土) 04:10:20ID:???
>>896
uid, gidでやっても?
chown scalar(getpwnam('www')),scalar(getgrnam('GROUPNAME')),"$filename";
0899nobodyさん2006/09/09(土) 04:47:58ID:???
>>898
ありがとうございます!
uid,gidで解決しました。
0900nobodyさん2006/09/09(土) 04:59:01ID:???
質問です。
auでフォームから送信すると次のページのURLに
?x-up-destcharset=17
と付くんですがなぜですか?

また、これを表示させない方法があれば教えてください。
0901nobodyさん2006/09/09(土) 04:59:38ID:???
>>895
どんな結果を期待してたんだ?
nakasotoと出力されて当然なのだが???
09028962006/09/09(土) 05:29:02ID:???
>>899
で解決して喜んではいたのですが
ユーザ名,グループ名 では駄目だった理由が知りたくて
戻って参りました...どなたかお教えください。
perl chown で検索した解説サイトではほぼ全てが
「chown ユーザ名,グループ名,ファイル名」
という説明になっているということは一般的にはuid,gid形式では
指定しないのでしょうか。
環境はFreeBSD+perl5.8.8です。
0903nobodyさん2006/09/09(土) 05:46:10ID:???
>>900
スレ違い
0904nobodyさん2006/09/09(土) 05:55:38ID:???
>>903
これはPerlの設定ではどうしようもないって事ですか?
わかりましたスレ違いすみませんでした
0905nobodyさん2006/09/09(土) 07:40:54ID:???
>>900 >>903
Perl がどこに出てきてるのだ?
0906nobodyさん2006/09/09(土) 10:19:37ID:???
>>902
まずperldocではちゃんと数値のUID,GIDと明言されてる。
そして、素人が作ったPerl解説サイトはデタラメ書いてる場合もある。

それはそうとして、どこでどう検索したのか書いてみろ。
yahooとgoogleで「perl chown」のTOP5件チェックしたが正しかったぞ。
09078952006/09/09(土) 10:32:15ID:???
>>897
ありがとうございます。
ファイルスコープなるものとブロックスコープなるものがあったんですね。

>>901
名前は知りませんでしたが、myはブロックスコープで動くと思っていました。
後者の出力が正しいとするなら、
前者はブロックの外でmy宣言してるのにもかかわらず、
ifのブロック内で$testが出力されているのが不思議だったのです。
0908nobodyさん2006/09/09(土) 11:39:12ID:???
>>907
スコープがネストされてる場合内側から外側のスコープが見えるよ
他の言語でも言うグローバル変数はそういう使い方
09098952006/09/09(土) 13:05:50ID:???
>>908
知りませんでした。ありがとうございます。
{
my $block;
{・・・・・・}
{
{・・・・・・}
}
}
などでも・・・・・・の位置から$blockをみれるということですか。
ということはサブルーチンに移るときだけ気をつければいいんですね。
レス数が900を超えています。1000を超えると表示できなくなるよ。