Lascu, creo que te estás equivocando... Además, lo que tú quieres se puede hacer con un nivel 88 y un pequeño bucle:
Código COBOL:
IDENTIFICATION DIVISION.
PROGRAM-ID. TESTMAIL.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-MAIL.
05 WS-MAIL-CHAR PIC X OCCURS 50 TIMES.
88 WS-CHAR-VAL-SI VALUES '@' '_' '.'
'a' THRU 'i', 'j' THRU 'r', 's' THRU 'z', '0' THRU '9'.
01 IDX-1 PIC 99.
01 SW-ERROR PIC X.
88 SW-ERROR-SI VALUE 'S'.
88 SW-ERROR-NO VALUE 'N'.
PROCEDURE DIVISION.
MOVE FUNCTION LOWER-CASE(WS-MAIL) TO WS-MAIL
SET SW-ERROR-NO TO TRUE
MOVE 1 TO IDX-1
PERFORM UNTIL WS-MAIL-CHAR(IDX-1) = SPACES OR IDX-1 > 50
IF NOT WS-CHAR-VAL-SI(IDX-1)
SET SW-ERROR-SI TO TRUE
EXIT PERFORM
END-IF
ADD 1 TO IDX-1
END-PERFORM
IF SW-ERROR-SI
DISPLAY "Error de e-mail: " WS-MAIL-CHAR(IDX-1)
ELSE
DISPLAY "¡E-mail correcto!"
END-IF
GOBACK.