When executed: - ??? is warn.- ... is fail. - !!! is ‘die`.
Otherwise, they’re identical (notably, when *not* executed, which is the usual case). You’d use ??? when you’re not implementing something yet but it needs to be callable (say, a debugging function). Given the difference in behavior between fail and die (fail is an unthrown exception which is suppressed unless called in Sink context or used in an expression as anything but a Failure or to test truth or definedness), I’d suggest that !!! be used in a block that’s being used for its return value (unless “always false and undefined” is an acceptable return value until you get around to implementing it and you want to be able to call it in the meantime), and ... elsewhere. sub warner() { ??? } my $x = warner(); # "Stub code executed" warning here say "Hi!"; # Hi! is printed. vs. sub failer() { ... } my $x = failer(); # nothing happens yet say "Hi!"; # Hi! will be printed say $x; # "Stub code executed" will be thrown here. vs. sub dier() { !!! } my $x = dier(); # code will stop execution here with a "Stub code executed" exception say "Hi!"; # never gets here On Mon, Sep 10, 2018 at 4:22 PM yary <not....@gmail.com> wrote: > Semantically > !!! is "if control flow hits here, it's an error" > ... is "The implementation is elsewhere, or this is not yet implemented" > > at least that's my impression > > -y > > On Mon, Sep 10, 2018 at 12:04 PM, Parrot Raiser <1parr...@gmail.com> > wrote: > >> There are 3 kinds of yadda, yadda operator: >> >> !!! dies with a message: Stub code executed >> in block <unit> at yad1 line 2 >> >> ... dies with an identical message >> >> ??? produces the message, but continues operating. >> >> The only difference I can find between !!! and ... is that !!! >> produces bizarre behaviour when run from the command line. (Bash >> appears to be editing the code before P6 sees it.) >> >> What is supposed to be the difference between !!! and ...? (And bonus >> points if you can explain what bash is doing.) >> > >