Perl メール送信にて
禁止語句を設定できるようにしました。
下記コードです。
my @ngword = ("禁止語句");
if(&ban($Name, \@ngword)) {
&error
}
sub ban
{
my $body = shift;
my $word = shift;
$body =~ s/(\x0d\x0a|\x0a|\x0d|\n|\s|\x81\x41|\xff)//g;
return map { $body =~ /$_/m } @$word;
}
実際これでブロックはしてくれるのですが、
my @ngword = ("禁止語句");
この部分をメモ帳(texteditor)から読み込む方法ってないでしょうか?
あれば教えて頂きたいです・・・
A 回答 (7件)
- 最新から表示
- 回答順に表示
No.7
- 回答日時:
すみません, #2 には私が勘違いしていた部分があって, そのままではまず間違いなくうまくいかないはずです. ごめんなさい.
our の仕様を勘違いしてました.
{
open my $fh, '<', 'bannedwords.txt';
chomp(our @ngword = <$fh>);
}
とすると, この @ngword を外で使おうとするとそれなりになんかしないとダメでした. とりあえずこの部分 (4行) を
my @ngword;
{
open my $fh, '<', 'bannedwords.txt';
chomp(@ngword = <$fh>);
}
の 5行で置き換えれば @ngword のスコープの問題は解消できるはずです... が....
ただ, 本当にこれが問題だとするとなんか動作が変な気もします. とはいえ今わかっている情報からは (文字コードとかファイル名とかを除けば) これくらいしかおかしなところがないような気もするので, とりあえずこれでどうでしょうか. あ, 動かす前に構文チェックくらいはしてもらえるとありがたいところ.
すみません・・・
ありがとうございます。
構文チェックというのが、 Perl -c スクリプト名.pl
でなら「syntax OK」と表示されました。
文字コードは、Perlファイル→「日本語シフトJIS」
テキストファイル→「ANSI」
この辺は、初期値で保存してます。
また、「print \@ngword;」を適当な行にたし、どのように返ってくるのか試したら「ARRAY(0x13725a4)」と表示されました。
ただ「0x」から後ろはランダムです・・・
No.6
- 回答日時:
「errorと返らなかったのです・・・」とだけ言われてもねぇ.
・では実際どうなったのか
とか
・各種の変数の中身はどうであったのか
とか
・ファイル名は正しいのか
など, あなたの調べること (あなたにしかわからないこと) はもっとたくさんあるよね. それらをなぜ隠そうとするのですか?
実際どうなったのか
>初期のコードで、No2でご掲示くださったコードにかえ実行すると
コマンドラインはなにも起こらないです。
'bannedwords.txt' これの中身は 禁止語句 としかいれておりません。
各種の変数の中身はどうであったのか
>$変数には 禁止語句 @変数にも 禁止語句
としかいれておりません。
ファイル名は正しいのか
>確認しました。
とりあえずの練習でしたので、まだこれ以上は、なにもできていないので隠すことはないのですが・・・;;
my @ngword = &ng;
sub ng
{
"禁止語句";
}
テキストではないですが、サブで試したりはしましたが・・
No.5
- 回答日時:
「上手くいかなかったです」っていわれても, なにがどう「上手くいかなかった」のかさっぱりわからんのよ.
さらにいえば, なにをどう考えてそう書き換えるにいたったのかまったく理解できない.
初回質問時のコードで
my $Name ="禁止語句";
my @ngword = ("禁止語句");
if(&ban($Name, \@ngword)) {
print "error";
}
sub ban
{
my $body = shift;
my $word = shift;
$body =~ s/(\x0d\x0a|\x0a|\x0d|\n|\s|\x81\x41|\xff)//g;
return map { $body =~ /$_/m } @$word;
}
これの
my @ngword = ("禁止語句");
を
{
open my $fh, '<', 'bannedwords.txt';
chomp(our @ngword = <$fh>);
}
と変えたのですが、
errorと返らなかったのです・・・
No.4
- 回答日時:
そのようなことなら既に #2 に書いたんだけど. なにが問題になってるんだろう?
2でご掲示くださったコードの使い方
my $Name = "禁止語句";
{
open my $fh, '<', 'bannedwords.txt';
chomp(our @ngword = <$fh>);
}
if($Name, $fh) {
print "error\n";
}
というふうにさせてもらい
テキストには"禁止語句"としてはみたのですが・・・
上手くいかなかったです;;
No.3
- 回答日時:
ごめん, なにをしようとしているのかさっぱりわかんないや.
「\@ngwordこれは、どういう記述になるのですか・・・?」とか「$fhと試してみたのですがorz」とかがなにをいわんとしているのかがわかんない. どういうことをしたいの?
説明がおかしいですね・・・
1から説明させていただきます。
my $Name = "あ";
my @ngword = &ng;
if(&ban($Name, \@ngword)) {
print "error\n";
print @ngword;
}
sub ban
{
my $body = shift;
my $word = shift;
$body =~ s/(\x0d\x0a|\x0a|\x0d|\n|\s|\x81\x41|\xff)//g;
return map { $body =~ /$_/m } @$word;
}
sub ng
{
"あ","禁止" ,"い","語句"
}
このようなコードを組んでおります。
(初期の質問と違うのは、自分なりに試した結果、現在ここまでできたため)
そこでNameは実際Paramから受け取るのですが仮に「あ」とします。
その「あ」が禁止ワードだった場合、「sub ng」に「”あ”」が設定されているためerrorを返すのですが、
このコード内で「sub ng」を「my @ngword = &ng;」の
「@ngword」に代入しているのですが、
「sub ng」からではなく、「ng.txt」(仮)から「@ngword」に代入させたいと考えていたのですが、そのやり方がわからなく質問させていただきました。
※第三者でも禁止ワードを設定できるようにしたいため
(Perlを使用しているのが、私のみだからです)
No.2
- 回答日時:
えぇと.... ひょっとして, 通常では「テキストファイル」と呼ばれるもののことを指している?
もしそうなら例えば (エラー処理は無視して)
my @ngword = ("禁止語句");
の代わりに
{
open my $fh, '<', 'bannedwords.txt';
chomp(our @ngword = <$fh>);
}
のような感じかな.
>通常では「テキストファイル」と呼ばれるもののことを指している?
そうです;;
>{
open my $fh, '<', 'bannedwords.txt';
chomp(our @ngword = <$fh>);
}
ご掲示くださりありがとうございます。
使い方がいろいろ試したみたのですが、
前回の
if(&ban($Name, \@ngword)) {
&error
}
\@ngwordこれは、どういう記述になるのですか・・・?
また、違う書き方になるのでしょうか?
$fhと試してみたのですがorz
No.1
- 回答日時:
「メモ帳(texteditor)から読み込む」とはどういうことでしょうか?
そのプログラムが動いているときに, たまたま何か書こうとしていた「メモ帳(texteditor)」から読み込む, ということでしょうか? だとすると, 「メモ帳(texteditor)」が動いてないときにはどのような動作をすればいいのでしょうか?
コメントありがとうございます。
プログラムが動く時はメモ帳(仮に名前を、「禁止マスタ」)
は、動いていないはずです・・・
例えば
my @ngword = ("あ","い","う");
としたとき「あ」「い」「う」の文字が禁止語句で
禁止マスタで
1行目|あ
2行目|い
3行目|う
というふうにして
プログラムが動いたときにメモ帳の
1行目から最終行の文字が含まれていないか
チェックして含まれていればerrorに飛ぶ
説明がわかりずらいかもしれませんが、
簡単に言えば@ngword のリストのマスタがほしいということです。
できれば
禁止語句に関しては、第3者も触れるようにしておきたいため、メモ帳
という選択をしました。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- 英語 英語の問題で教えていただきたいです。 ( )の中の語句を並べ替えなさい。ただし、一語不足している語が 2 2023/06/18 15:55
- 英語 英語ができる方に質問です。 以下の文がネイティブの方に伝わるかどうかを確認していただけないでしょうか 7 2022/12/16 14:54
- 高校 父が育った村▶︎The village where my father was brought up 2 2023/03/15 16:02
- 英語 【英語】 新しい職場の人と仲良くできるか心配です。 ①I'm worried I won't get 4 2022/06/26 21:19
- 英語 提示文で、whatever'sの's(アポストロフィエス)がある理由 3 2023/07/07 07:58
- フランス語 下記のフランス語の英訳は文法的に合っていますか? J’ai donné à mon père le 1 2023/06/25 19:21
- Perl perlの構文でカンマの意味が分からない 2 2022/10/30 01:53
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- 英語 「名詞 of 名詞」において、どちらも同一人物が主体となったり所有する名詞の適切な各限定詞について 2 2022/08/18 11:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MATLABでカーブフィットしたデ...
-
連番のファイルを何個も開きたい
-
ファイル名を複数個配列で確保...
-
[perl] もっとシンプルに改良、...
-
VBAコードを張り付け後のエクセ...
-
バッチファイルの作り方(CSV→...
-
batファイルでrenameができませ...
-
close()で例外が投げられる理由
-
vba dir の相対パス
-
MATLABのm-fileについて
-
文字列をカウントする方法
-
至急お願いします。C言語で.img...
-
一定時間が経過したフォルダの削除
-
JavaでCSVファイルを高速に読む...
-
画像アップロード機能を追加し...
-
csvファイルの横方向への改行に...
-
Perlで特定行から特定行までを...
-
【エクセル】改行無しテキスト...
-
perlのエディタでおすすめを教...
-
フォルダ内のファイルを全て開...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル名を複数個配列で確保...
-
Fortranで1行飛ばして読み込む方法
-
perlで指定範囲を複数ファイル...
-
Pythonでegrep機能をつかいたい
-
「パスが見つかりません」とい...
-
ifstream/ofstream について
-
テキストファイルの各行を配列...
-
Perlのワンライナーをスクリプ...
-
ifstream を利用した1行分のテ...
-
C++でのテキストファイル読み込...
-
perlプログラム 外部複数ファ...
-
system関数と引数について
-
Perl 重複カウント 上位3名
-
Pythonで非日本語のUnicode文字...
-
shellのコマンド deffの差分の...
-
perlで先頭の数値をみて昇順に...
-
Visual Basicを使って三平方の...
-
while文がうまく動かない
-
Perl Grepについて
-
Perlによるディレクトリ内の連...
おすすめ情報