#define CALL_COUNT_ITEMS_IF( type ) \ if (sv_derived_from(ST(0), type)) { \ RETVAL=THIS->countItemsIn( \ *(type *) SvIV((SV*)SvRV(ST(0))) \ ); \ } int MyClass::countItemsIn (...) CODE: CALL_COUNT_ITEMS_IF( 'MyList' ); CALL_COUNT_ITEMS_IF( 'MyHash' ); OUTPUT: RETVAL