LINUX.ORG.RU

История изменений

Исправление gh0stwizard, (текущая версия) :

Одна из интересных особенностей интерфейса AnyEvent — это необходимость использования замыканий, поскольку нет другой возможности передать параметры в колбэк-функцию.

4.2

#!/usr/bin/perl

use strict;
use warnings;

use EV;
use AnyEvent;
use JSON::XS qw/encode_json/;

my $w = AE::timer 1, 1, sub {
  my ($x) = @_;
  AE::log fatal => "bullshit: %s", encode_json($x->data());
};

$w->data({"truth" => "somewhere else"});

EV::run;

Надеюсь не надо пояснять почему так работает?

Создав переменную состояния, никогда не запускайте метод recv(), если знаете, что в коде нигде не будет вызываться метод send(). Разные реализации СОП ведут себя по-разному в подобной ситуации. EV, например, просто начинает загружать процессор на 100%.

Пруф в студию или не было.

#!/usr/bin/perl

use EV;
use AnyEvent;

my $cv = AE::cv;

my $t = AE::timer 1, 1, sub {
  AE::log error => "ales good";
};

my $t = AE::timer 1, 1, sub {
  AE::log error => "bullshit 2", $cv->recv();
};

EV::run;

Кроме того нельзя использовать die() внутри колбэка, поскольку нормально обработать это событие будет затруднительно. Впрочем в EV, будет выдано предупреждение о смерти колбэка, но програм- ма при этом продолжит выполнение.

4.2

#!/usr/bin/perl

use strict;
use warnings;

use EV;
use AnyEvent;

$EV::DIED = sub {
  AE::log fatal => "$@";
};

my $t = AE::timer 1, 1, sub {
  die "bullshit 3";
};

EV::run;

Исправление gh0stwizard, :

Одна из интересных особенностей интерфейса AnyEvent — это

необходимость использования замыканий, поскольку нет другой возможности передать параметры в колбэк-функцию.

4.2

#!/usr/bin/perl

use strict;
use warnings;

use EV;
use AnyEvent;
use JSON::XS qw/encode_json/;

my $w = AE::timer 1, 1, sub {
  my ($x) = @_;
  AE::log fatal => "bullshit: %s", encode_json($x->data());
};

$w->data({"truth" => "somewhere else"});

EV::run;

Надеюсь не надо пояснять почему так работает?

Создав переменную состояния, никогда не запускайте метод recv(), если знаете, что в коде нигде не будет вызываться метод send(). Разные реализации СОП ведут себя по-разному в подобной ситуации. EV, например, просто начинает загружать процессор на 100%.

Пруф в студию или не было.

#!/usr/bin/perl

use EV;
use AnyEvent;

my $cv = AE::cv;

my $t = AE::timer 1, 1, sub {
  AE::log error => "ales good";
};

my $t = AE::timer 1, 1, sub {
  AE::log error => "bullshit 2", $cv->recv();
};

EV::run;

Кроме того нельзя использовать die() внутри колбэка, поскольку нормально обработать это событие будет затруднительно. Впрочем в EV, будет выдано предупреждение о смерти колбэка, но програм- ма при этом продолжит выполнение.

4.2

#!/usr/bin/perl

use strict;
use warnings;

use EV;
use AnyEvent;

$EV::DIED = sub {
  AE::log fatal => "$@";
};

my $t = AE::timer 1, 1, sub {
  die "bullshit 3";
};

EV::run;

Исправление gh0stwizard, :

Одна из интересных особенностей интерфейса AnyEvent — это

необходимость использования замыканий, поскольку нет другой возможности передать параметры в колбэк-функцию.

4.2

#!/usr/bin/perl

use strict;
use warnings;

use EV;
use AnyEvent;
use JSON::XS qw/encode_json/;

my $w = AE::timer 1, 1, sub {
  my ($x) = @_;
  AE::log fatal => "bullshit: %s", encode_json($x->data());
};

EV::run;

Надеюсь не надо пояснять почему так работает?

Создав переменную состояния, никогда не запускайте метод recv(), если знаете, что в коде нигде не будет вызываться метод send(). Разные реализации СОП ведут себя по-разному в подобной ситуации. EV, например, просто начинает загружать процессор на 100%.

Пруф в студию или не было.

#!/usr/bin/perl

use EV;
use AnyEvent;

my $cv = AE::cv;

my $t = AE::timer 1, 1, sub {
  AE::log error => "ales good";
};

my $t = AE::timer 1, 1, sub {
  AE::log error => "bullshit 2", $cv->recv();
};

EV::run;

Кроме того нельзя использовать die() внутри колбэка, поскольку нормально обработать это событие будет затруднительно. Впрочем в EV, будет выдано предупреждение о смерти колбэка, но програм- ма при этом продолжит выполнение.

4.2

#!/usr/bin/perl

use strict;
use warnings;

use EV;
use AnyEvent;

$EV::DIED = sub {
  AE::log fatal => "$@";
};

my $t = AE::timer 1, 1, sub {
  die "bullshit 3";
};

EV::run;

Исправление gh0stwizard, :

Одна из интересных особенностей интерфейса AnyEvent — это

необходимость использования замыканий, поскольку нет другой возможности передать параметры в колбэк-функцию.

4.2

#!/usr/bin/perl

use strict;
use warnings;

use EV;
use AnyEvent;
use JSON::XS qw/encode_json/;

my $w = AE::timer 1, 1, sub {
  my ($x) = @_;
  AE::log fatal => "bullshit: %s", encode($x->data());
};

EV::run;

Надеюсь не надо пояснять почему так работает?

Создав переменную состояния, никогда не запускайте метод recv(), если знаете, что в коде нигде не будет вызываться метод send(). Разные реализации СОП ведут себя по-разному в подобной ситуации. EV, например, просто начинает загружать процессор на 100%.

Пруф в студию или не было.

#!/usr/bin/perl

use EV;
use AnyEvent;

my $cv = AE::cv;

my $t = AE::timer 1, 1, sub {
  AE::log error => "ales good";
};

my $t = AE::timer 1, 1, sub {
  AE::log error => "bullshit 2", $cv->recv();
};

EV::run;

Кроме того нельзя использовать die() внутри колбэка, поскольку нормально обработать это событие будет затруднительно. Впрочем в EV, будет выдано предупреждение о смерти колбэка, но програм- ма при этом продолжит выполнение.

4.2

#!/usr/bin/perl

use strict;
use warnings;

use EV;
use AnyEvent;

$EV::DIED = sub {
  AE::log fatal => "$@";
};

my $t = AE::timer 1, 1, sub {
  die "bullshit 3";
};

EV::run;

Исходная версия gh0stwizard, :

Одна из интересных особенностей интерфейса AnyEvent — это

необходимость использования замыканий, поскольку нет другой возможности передать параметры в колбэк-функцию.

4.2

#!/usr/bin/perl

use strict;
use warnings;

use EV;
use AnyEvent;
use JSON::XS qw/encode_json/;

my $w = AE::timer 1, 1, sub {
  my ($x) = @_;
  AE::log fatal => "bullshit: %s", encode($x->data());
};

EV::run;

Надеюсь не надо пояснять почему так работает?

Создав переменную состояния, никогда не запускайте метод recv(), если знаете, что в коде нигде не будет вызываться метод send(). Разные реализации СОП ведут себя по-разному в подобной ситуации. EV, например, просто начинает загружать процессор на 100%.

Пруф в студию или не было.

#!/usr/bin/perl

use EV;
use AnyEvent;

my $cv = AE::cv;

my $t = AE::timer 1, 1, sub {
  AE::log error => "ales good";
};

my $t = AE::timer 1, 1, sub {
  AE::log error => "bullshit 2", $cv->recv();
};

EV::run;

Кроме того нельзя использовать die() внутри колбэка, поскольку

нормально обработать это событие будет затруднительно. Впрочем в EV, будет выдано предупреждение о смерти колбэка, но програм- ма при этом продолжит выполнение.

4.2

#!/usr/bin/perl

use strict;
use warnings;

use EV;
use AnyEvent;

$EV::DIED = sub {
  AE::log fatal => "$@";
};

my $t = AE::timer 1, 1, sub {
  die "bullshit 3";
};

EV::run;