質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Q&A

解決済

1回答

1627閲覧

AnyEvent::Twitter::StreamとKiokuDBのスコープに関して

fono09

総合スコア6

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

0グッド

0クリップ

投稿2014/12/07 11:00

AnyEvent::Twitter::StreamとKiokuDBを用いてツイートを処理しようと試みていますが、
以下のソースを実行すると
no open live object scope at /usr/local/share/perl/5.18.2/KiokuDB/Collapser/Buffer.pm line 229.
とエラーを吐いて、停止してしまいます。どのようにスコープを設定すれば良いのでしょうか。ご教授頂ければ幸いです。

lang

1#!/usr/bin/perl 2 3use strict; 4use warnings; 5 6use AnyEvent::Twitter::Stream; 7our $cv = AE::cv; 8 9use HTTP::Date; 10 11use KiokuDB; 12our $kdb = KiokuDB->connect( 13 "dbi:SQLite:dbname=test.db", 14 create => 1, 15); 16 17my ($consumer_key,$consumer_secret,$access_token,$access_token_secret)= @your_tokens; 18 19our @tweets; 20my $ats = AnyEvent::Twitter::Stream->new( 21 consumer_key => $consumer_key, 22 consumer_secret => $consumer_secret, 23 token => $access_token, 24 token_secret => $access_token_secret, 25 method => "userstream", 26 replies => "all", 27 on_tweet => sub{ 28 my $tweet = shift; 29 $kdb->new_scope; 30 31 if(!$tweet->{user} || !$tweet->{text} ){return;} 32 33 34 my $mt = Tweet->new( 35 id => $tweet->{id}, 36 text => $tweet->{text}, 37 ); 38 39 push(@tweets,$kdb->store( $mt )); 40 41 $kdb->scope_remove; 42 43 }, 44 on_error => sub{ 45 my $error = shift; 46 warn "ERROR: $error\n"; 47 my $done->send; 48 }, 49 on_eof => sub{ 50 my $done->send; 51 warn "EOF\n"; 52 }, 53); 54$cv->recv; 55 56{ 57 package Tweet; 58 use Moose; 59 60 has 'id' => ( 61 is => 'ro', 62 isa => 'Int', 63 required => 1, 64 ); 65 66 has 'text' => ( 67 is => 'ro', 68 isa => 'Str', 69 required => 1, 70 ); 71} 72

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

KiokuDBは使ったことがなく、実際に試せる環境が無いので、はっきりとは分かりませんが、下記ページによると、
KiokuDB::Tutorial - KiokuDBを始めよう - perldoc.jp

スコープは変数に入れる必要があるのではないでしょうか。

lang

1my $scope = $kdb->new_scope;

推測ですが、その変数が有効な間をスコープとしてるのかな、と思います。

見当違いだったらすみません。

投稿2014/12/18 13:32

argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fono09

2014/12/19 05:05

どうも、回答ありがとうございます。 私も当該のドキュメントを閲覧しておりまして、イベント発生時に実行される無名関数内のスコープ設定が必要なものと思い記述しておりました。 しかしながら、取り除いた状態でも、当該のエラーが発生しておりますので、何らかの原因が他にあると思われます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問