/* Test for various pattern matching operators*/

/* Test that the match argument is valid in a procedure called
 * while a match is open
 */
proc winner()
{
    "Mondo ", ?1, "!\n";
}

proc main()
{
    var s = "Did we win?";

    /* Execute the match statement.  The first match is the one
     * executed.
     */
    match (s) {
    case "(w.n)" : say(?1, "!\n");  winner();
    case "win" : "We should not be here!\n";
    default : "No match.\n";
    }

    /* Execute the match operator */
    if (s ~= "lose|win") {
        "We won again!\n";
    }
    else {
        "We definitely lost.\n";
    }

    /* Verify the case of the match operator which does not match */
    if (s ~= "epic|fail") {
        "Epic fail!\n";
    }

    /* Verify that the match argument is invalid when a match statement
     * is not active
     */
    try {
        s = ?1;
    }
    catch( e ) {
        "Still winning - caught exception (as expected)\n";
    }
}